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

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

发布时间:2020-12-13 02:35:32 所属栏目:PHP教程 来源:网络整理
导读:《:php curl请求信息和返回信息设置代码实例》要点: 本文介绍了:php curl请求信息和返回信息设置代码实例,希望对您有用。如果有疑问,可以联系我们。 在用curl抓取网页内容的时候,经常要知道,网页返回的哀求头信息,和哀求的相关信息,特别是在哀求过程中

《:php curl请求信息和返回信息设置代码实例》要点:
本文介绍了:php curl请求信息和返回信息设置代码实例,希望对您有用。如果有疑问,可以联系我们。

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

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

$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);//不直接输出response 
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);//如果返回的response 头部中存在Location值,就会递归哀求 
$content=curl_exec($ch); 
$rinfo=curl_getinfo($ch); 
 
echo $content,"</br>"; 
echo "<hr>"; 
print_r($rinfo); 

下面是输出的结果PHP实战

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就需要递归的分析每次哀求返回的responsePHP实战

下面是我写的一个获取最后一次哀求url的递归函数PHP实战

$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'; 
[php] view plaincopy
$realUrl=getRedirectLocation($url); 
 
echo "</br>--->",$realUrl; 
 
function getRedirectLocation($url){ 
   
  $realUrl=$url; 
  echo $url,"</br>"; 
  $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],"</br>"; 
    unset($content); 
    $realUrl=getRedirectLocation($matches[1]); 
  } 
  if(isset($content)){ 
    unset($content); 
  } 
  return $realUrl; 
} 

欢迎参与《:php curl请求信息和返回信息设置代码实例》讨论,分享您的想法,编程之家 52php.cn为您提供专业教程。

(编辑:李大同)

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

    推荐文章
      热点阅读