博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php curl请求信息和返回信息
阅读量:2430 次
发布时间:2019-05-10

本文共 2784 字,大约阅读时间需要 9 分钟。

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

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

$url='http://www.appchina.com/market/r/489267/com.appshare.android.ilisten.vapk?c=aplus.direct&uid=gAJ9cQEu1TlyZxsXN-aB4RaanvFL6t6Bj-vj0rIBs&p=aplus.detail&m=redirect';$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);//不直接输出responsecurl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);//如果返回的response 头部中存在Location值,就会递归请求$content=curl_exec($ch);$rinfo=curl_getinfo($ch);echo $content,"
";echo "

";print_r($rinfo);
下面是输出的结果

HTTP/1.1
200 OKServer: nginxDate: Sat, 22 Dec 2012 06:17:44 GMTContent-Type: application/vnd.android.package-archiveConnection: closeLast-Modified: Mon, 03 Dec 2012 16:00:00 GMTExpires: Tue, 03 Dec 2013 16:00:00 GMTCache-Control: max-age=31536000Content-Length: 2142149

Array( [url] => 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的递归函数

$url='http://www.appchina.com/market/r/489267/com.appshare.android.ilisten.vapk?c=aplus.direct&uid=gAJ9cQEu1TlyZxsXN-aB4RaanvFL6t6Bj-vj0rIBs&p=aplus.detail&m=redirect';
$realUrl=getRedirectLocation($url);echo "
--->",$realUrl;function getRedirectLocation($url){ $realUrl=$url; echo $url,"
"; $ch=curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 1);curl_setopt($ch, CURLOPT_TIMEOUT, 3);//设置curl执行时间不超过3秒 //curl_setopt($ch, CURLOPT_NOBODY, 1);//这行不能要,如果添上,那么在遇到302重定向的时候就会得不到真正的请求url curl_setopt($ch,CURLOPT_RETURNTRANSFER,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;}

转载地址:http://wysmb.baihongyu.com/

你可能感兴趣的文章
小程序数组去重
查看>>
微信小程序生成分享海报
查看>>
值得收藏的 CSS 形状
查看>>
H5屏幕宽度大小自适应方式
查看>>
中秋诗歌两首
查看>>
计算机学科一些重要算法的列表
查看>>
进站画面:1q84音乐电台
查看>>
回复旦
查看>>
二十世纪计算机十大著名算法
查看>>
MFC程序更换XP皮肤
查看>>
SkinSharp使用方法
查看>>
盘点2010年电子书市场
查看>>
How Computers Know What We Want — Before We Do
查看>>
About Recommender Systems
查看>>
jason数据格式
查看>>
金山快盘的安全性太差了
查看>>
KDD Cup2011
查看>>
“相关性”时代的到来
查看>>
腾讯盛大百度版咆哮体
查看>>
opencv阈值法分割图像
查看>>