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 相关文章推荐
杏林同学录(八)
Oct 09 PHP
第五节--克隆
Nov 16 PHP
Mysql和网页显示乱码解决方法集锦
Mar 27 PHP
php垃圾代码优化操作代码
Aug 05 PHP
无法载入 mcrypt 扩展,请检查 PHP 配置终极解决方案
Jul 18 PHP
深入PHP中的HashTable结构详解
Jun 13 PHP
解析PHP强制转换类型及远程管理插件的安全隐患
Jun 30 PHP
thinkphp判断访客为手机端或PC端的方法
Nov 24 PHP
自己写的php中文截取函数mb_strlen和mb_substr
Feb 09 PHP
php编程中echo用逗号和用点号连接的区别
Mar 26 PHP
PHP实现的简单AES加密解密算法实例
May 29 PHP
PHP实现通过CURL上传文件功能示例
May 30 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
星际争霸中的对战模式介绍
2020/03/04 星际争霸
打造计数器DIY三步曲(中)
2006/10/09 PHP
《PHP边学边教》(02.Apache+PHP环境配置――上篇)
2006/12/13 PHP
使用Apache的htaccess防止图片被盗链的解决方法
2013/04/27 PHP
ThinkPHP之getField详解
2014/06/20 PHP
PHP判断表单复选框选中状态完整例子
2014/06/24 PHP
Laravel 5 框架入门(四)完结篇
2015/04/09 PHP
浅析PHP关键词替换的类(避免重复替换,保留与还原原始链接)
2015/09/22 PHP
Laravel5.0+框架邮件发送功能实现方法图文与实例详解
2019/04/23 PHP
PHP实现的微信APP支付功能示例【基于TP5框架】
2019/09/16 PHP
laravel框架中视图的基本使用方法分析
2019/11/23 PHP
Thinkphp 框架扩展之应用模式实现方法分析
2020/04/27 PHP
jQuery中live方法的重复绑定说明
2011/10/21 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(jquery)
2014/11/16 Javascript
Bootstrap轮播插件简单使用方法介绍
2016/06/21 Javascript
AngularJs 利用百度地图API 定位当前位置 获取地址信息
2017/01/18 Javascript
Bootstrap媒体对象学习使用
2017/03/07 Javascript
JavaScript对象引用与赋值实例详解
2017/03/15 Javascript
angular 实现下拉列表组件的示例代码
2019/03/09 Javascript
微信小程序云开发实现数据添加、查询和分页
2019/05/17 Javascript
基于vue实现图片验证码倒计时60s功能
2019/12/10 Javascript
echarts实现折线图的拖拽效果
2019/12/19 Javascript
[00:35]DOTA2上海特级锦标赛 VP战队宣传片
2016/03/04 DOTA
python回调函数用法实例分析
2015/05/09 Python
python实现冒泡排序算法的两种方法
2018/03/10 Python
python中matplotlib的颜色及线条控制的示例
2018/03/16 Python
对numpy和pandas中数组的合并和拆分详解
2018/04/11 Python
HTML5拖放功能_动力节点Java学院整理
2017/07/13 HTML / CSS
银行出纳岗位职责
2013/11/25 职场文书
创业者是否需要商业计划书?
2014/02/07 职场文书
岗位说明书标准范本
2014/07/30 职场文书
2014村党支部书记党建工作汇报材料
2014/11/02 职场文书
2016习总书记系列重要讲话心得体会
2016/01/15 职场文书
Nginx工作原理和优化总结。
2021/04/02 Servers
Netty分布式客户端处理接入事件handle源码解析
2022/03/25 Java/Android
微信告警的zabbix监控系统 监控整个NGINX集群
2022/04/18 Servers