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 相关文章推荐
PHP个人网站架设连环讲(三)
Oct 09 PHP
关于PHP递归算法和应用方法介绍
Apr 15 PHP
PHP判断图片格式的七种方法小结
Jun 03 PHP
PHP删除目录及目录下所有文件的方法详解
Jun 06 PHP
PHP中数组定义的几种方法
Sep 01 PHP
php+xml编程之xpath的应用实例
Jan 24 PHP
php计算指定目录下文件占用空间的方法
Mar 13 PHP
文件上传之SWFUpload插件(代码)
Jul 30 PHP
PHP实现搜索地理位置及计算两点地理位置间距离的实例
Jan 08 PHP
Zend Framework动作助手(Zend_Controller_Action_Helper)用法详解
Mar 05 PHP
功能强大的PHP发邮件类
Aug 29 PHP
Laravel5.5+ 使用API Resources快速输出自定义JSON方法详解
Apr 06 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构造二叉树算法示例
2017/06/21 PHP
PHP时间处理类操作示例
2018/09/05 PHP
新浪刚打开页面出来的全屏广告代码
2007/04/02 Javascript
JSON 编辑器实现代码
2009/12/06 Javascript
jquery tablesorter.js 支持中文表格排序改进
2009/12/09 Javascript
浅谈Javascript嵌套函数及闭包
2010/11/09 Javascript
JavaScript高级程序设计(第3版)学习笔记13 ECMAScript5新特性
2012/10/11 Javascript
setTimeout和setInterval的深入理解
2013/11/08 Javascript
实例讲解JS中数组Array的操作方法
2014/05/09 Javascript
javascript中拼接HTML字符串的最快、最好的方法
2014/06/07 Javascript
基于jQuery实现复选框的全选 全不选 反选功能
2014/11/24 Javascript
AngularJS控制器controller正确的通信的方法
2016/01/25 Javascript
5分钟打造简易高效的webpack常用配置
2017/07/04 Javascript
Vue高版本中一些新特性的使用详解
2018/09/25 Javascript
Vant 中的Toast设置全局的延迟时间操作
2020/11/04 Javascript
[02:24]DOTA2亚洲邀请赛 NAVI战队出场宣传片
2015/02/07 DOTA
Python函数中定义参数的四种方式
2014/11/30 Python
在Python下尝试多线程编程
2015/04/28 Python
python如何查看系统网络流量的信息
2016/09/12 Python
Python端口扫描简单程序
2016/11/10 Python
python 实现判断ip连通性的方法总结
2018/04/22 Python
python通过伪装头部数据抵抗反爬虫的实例
2018/05/07 Python
django 解决扩展自带User表遇到的问题
2020/05/14 Python
python在linux环境下安装skimage的示例代码
2020/10/14 Python
python实现计算器简易版
2020/12/17 Python
python实现双人五子棋(终端版)
2020/12/30 Python
ECCO爱步加拿大官网:北欧丹麦鞋履及皮具品牌
2017/07/08 全球购物
POP文化和音乐灵感的时尚:Hot Topic
2019/06/19 全球购物
名词解释WEB SERVICE,SOAP,UDDI,WSDL,JAXP,JAXM;JSWDL开发包的介绍。
2012/10/27 面试题
判断单链表中是否存在环
2012/07/16 面试题
EJB3.1都有哪些改进
2012/11/17 面试题
毕业生求职找工作的自我评价范文
2013/11/27 职场文书
九年级科学教学反思
2014/01/29 职场文书
党员入党表决心的话
2014/03/11 职场文书
水电站项目建议书
2014/05/12 职场文书
2014公司年终工作总结
2014/12/19 职场文书