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


Posted in PHP onApril 27, 2015

在用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);//不直接输出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);

下面是输出的结果

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'; 
[php] view plaincopy
$realUrl=getRedirectLocation($url); 
 
echo "</br>--->",$realUrl; 
 
function getRedirectLocation($url){ 
   
  $realUrl=$url; 
  echo $url,"</br>"; 
  $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],"</br>"; 
    unset($content); 
    $realUrl=getRedirectLocation($matches[1]); 
  } 
  if(isset($content)){ 
    unset($content); 
  } 
  return $realUrl; 
}
PHP 相关文章推荐
一个图形显示IP的PHP程序代码
Oct 19 PHP
PHP 页面编码声明方法详解(header或meta)
Mar 12 PHP
PHP 无限分类三种方式 非函数的递归调用!
Aug 26 PHP
php强制文件下载而非在浏览器打开的自定义函数分享
May 08 PHP
php 魔术方法详解
Nov 11 PHP
php实现通用的信用卡验证类
Mar 24 PHP
zen_cart实现支付前生成订单的方法
May 06 PHP
php实现在线通讯录功能(附源码)
May 13 PHP
PHP使用curl函数发送Post请求的注意事项
Nov 26 PHP
php 如何设置一个严格控制过期时间的session
May 05 PHP
完美解决在ThinkPHP控制器中命名空间的问题
May 05 PHP
php正确输出json数据的实例讲解
Aug 21 PHP
PHP rsa加密解密使用方法
Apr 27 #PHP
PHP、Java des加密解密实例
Apr 27 #PHP
PHP永久登录、记住我功能实现方法和安全做法
Apr 27 #PHP
php curl 获取https请求的2种方法
Apr 27 #PHP
PHP curl伪造IP地址和header信息代码实例
Apr 27 #PHP
JavaScript实现滚动栏效果的方法
Apr 27 #PHP
php curl 上传文件代码实例
Apr 27 #PHP
You might like
php 归并排序 数组交集
2011/05/10 PHP
浅谈php自定义错误日志
2015/02/13 PHP
获取当前网页document.url location.href区别总结
2008/05/10 Javascript
extjs 的权限问题 要求控制的对象是 菜单,按钮,URL
2010/03/09 Javascript
JavaScript 原型继承之构造函数继承
2011/08/26 Javascript
javascript 基础篇1 什么是js 建立第一个js程序
2012/03/14 Javascript
Javascript面向对象编程
2012/03/18 Javascript
jQuery实现简单网页遮罩层/弹出层效果兼容IE6、IE7
2014/06/16 Javascript
JavaScript获得表单target属性的方法
2015/04/02 Javascript
JavaScript中的Math.LN2属性用法详解
2015/06/12 Javascript
jQuery中prepend()方法使用详解
2015/08/11 Javascript
AngularJS使用ngMessages进行表单验证
2015/12/27 Javascript
js 判断一组日期是否是连续的简单实例
2016/07/11 Javascript
总结javascript中的六种迭代器
2016/08/16 Javascript
js友好的时间返回函数
2016/08/24 Javascript
ThinkPHP+jquery实现“加载更多”功能代码
2017/03/11 Javascript
React Native如何消除启动时白屏的方法
2017/08/08 Javascript
JS实现div模块的截图并下载功能
2017/10/17 Javascript
使用jQuery给Table动态增加行、清空table的方法
2018/09/05 jQuery
vue自定义全局共用函数详解
2018/09/18 Javascript
OpenLayer3自定义测量控件MeasureTool
2020/09/28 Javascript
Python中使用socket发送HTTP请求数据接收不完整问题解决方法
2015/02/04 Python
Python MySQLdb模块连接操作mysql数据库实例
2015/04/08 Python
Swift 3.0在集合类数据结构上的一些新变化总结
2016/07/11 Python
Python时间的精准正则匹配方法分析
2017/08/17 Python
用python实现的线程池实例代码
2018/01/06 Python
Python 实现字符串中指定位置插入一个字符
2018/05/02 Python
基于DATAFRAME中元素的读取与修改方法
2018/06/08 Python
德国原装品牌香水、化妆品和手表网站:BRASTY.DE
2016/10/16 全球购物
法律专业推荐信范文
2013/11/29 职场文书
党员自我评价分享
2013/12/13 职场文书
工作能力自我评价2015
2015/03/05 职场文书
鲁冰花观后感
2015/06/10 职场文书
护士心得体会范文
2016/01/25 职场文书
只用50行Python代码爬取网络美女高清图片
2021/06/02 Python
详解CSS3浏览器兼容
2022/12/24 HTML / CSS