加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php curl请求信息和返回信息设置代码实例

发布时间:2020-12-12 20:51:31 所属栏目:PHP教程 来源:网络整理
导读:在用curl抓取网页内容的时候,经常要知道,网页返回的请求头信息,和请求的相关信息,特别是在请求过程中存在重定向的时候获取请求返回头信息对分析请求内容很有帮助 下面就是一个请求中存在重定向的例子,我们的目的是要获取最终实际请求的url地址 $ch=curl

在用curl抓取网页内容的时候,经常要知道,网页返回的请求头信息,和请求的相关信息,特别是在请求过程中存在重定向的时候获取请求返回头信息对分析请求内容很有帮助

下面就是一个请求中存在重定向的例子,我们的目的是要获取最终实际请求的url地址

$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
//curl_setopt($ch,CURLOPT_POST,1);
//curl_setopt($ch,CURLOPT_POSTFIELDS,$params);
curl_setopt($ch,CURLOPT_HEADER,1);//返回response头部信息
curl_setopt($ch,CURLOPT_NOBODY,1);//不返回response body内容
//curl_setopt($ch,CURLOPT_MAXREDIRS,1);//设置请求最多重定向的次数
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);//不直接输出response
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);//如果返回的response 头部中存在Location值,就会递归请求
$content=curl_exec($ch);
$rinfo=curl_getinfo($ch);

echo $content,"
";
echo "


";
print_r($rinfo);

下面是输出的结果

http://www.d.appchina.com/McDonald/r/489267/com.appshare.android.ilisten.vapk?c=aplus.direct&uid=gAJ9cQEu1TlyZxsXN-aB4RaanvFL6t6Bj-vj0rIBs&p=aplus.detail&m=redirect [content_type] => application/vnd.android.package-archive [http_code] => 200 [header_size] => 289 [request_size] => 196 [filetime] => -1 [ssl_verify_result] => 0 [redirect_count] => 0 [total_time] => 0.171621 [namelookup_time] => 0.135256 [connect_time] => 0.152913 [pretransfer_time] => 0.152916 [size_upload] => 0 [size_download] => 0 [speed_download] => 0 [speed_upload] => 0 [download_content_length] => 2142149 [upload_content_length] => 0 [starttransfer_time] => 0.171582 [redirect_time] => 0 [certinfo] => Array ( ))

可以看到,经过递归请求后最终得到一个200的response,但是这中方式不能得到最后一次请求的url,也就是最终实际请求的url,要想得到这个url就需要递归的分析每次请求返回的response

下面是我写的一个获取最后一次请求url的递归函数

echo "
--->",$realUrl;

function getRedirectLocation($url){

$realUrl=$url;
echo $url,"
";
$ch=curl_init();
curl_setopt($ch,$url);
curl_setopt($ch,1);curl_setopt($ch,CURLOPT_TIMEOUT,3);//设置curl执行时间不超过3秒
//curl_setopt($ch,1);//这行不能要,如果添上,那么在遇到302重定向的时候就会得不到真正的请求url
curl_setopt($ch,1);
$content=curl_exec($ch);
//echo $content;
$rinfo=curl_getinfo($ch);
$matches=array();
if(preg_match('/Location:s+?(.+?)s+?/',$content,$matches)){
//echo $matches[1],"
";
unset($content);
$realUrl=getRedirectLocation($matches[1]);
}
if(isset($content)){
unset($content);
}
return $realUrl;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读