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 相关文章推荐
为php4加入动态flash文件的生成的支持
Oct 09 PHP
一个用php实现的获取URL信息的类
Jan 02 PHP
php addslashes 函数详细分析说明
Jun 23 PHP
在PHP中养成7个面向对象的好习惯
Jan 28 PHP
PHP连接MongoDB示例代码
Sep 06 PHP
PHP5函数小全(分享)
Jun 06 PHP
PHP获取浏览器信息类和客户端地理位置的2个方法
Apr 24 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十二)
Jun 25 PHP
PHP经典面试题集锦
Mar 19 PHP
PHP比较运算符的详细介绍
Sep 29 PHP
PHP curl模拟登录带验证码的网站
Nov 30 PHP
PHP面向对象程序设计之构造方法和析构方法详解
Jun 13 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
Get或Post提交值的非法数据处理
2006/10/09 PHP
PHP学习笔记 用户注册模块用户类以及验证码类
2011/09/20 PHP
PHP基于phpqrcode生成带LOGO图像的二维码实例
2015/07/10 PHP
PHP带节点操作的无限分类实现方法详解
2016/11/09 PHP
php调用云片网接口发送短信的实现方法
2017/10/25 PHP
thinkphp5 migrate数据库迁移工具
2018/02/20 PHP
Jquery中children与find之间的区别详细解析
2013/11/29 Javascript
基于JS代码实现当鼠标悬停表格上显示这一格的全部内容
2016/06/12 Javascript
angular和BootStrap3实现购物车功能
2017/01/25 Javascript
js, jQuery实现全选、反选功能
2017/03/08 Javascript
十分钟带你快速了解React16新特性
2017/11/10 Javascript
jquery自定义显示消息数量
2017/12/19 jQuery
jquery写出PC端轮播图实例
2018/01/26 jQuery
详解javascript常用工具类的封装
2018/01/30 Javascript
微信小程序实现导航栏选项卡效果
2020/06/19 Javascript
详解angular如何调用HTML字符串的方法
2018/06/30 Javascript
vue、react等单页面项目部署到服务器的方法及vue和react的区别
2018/09/29 Javascript
在vue项目中使用Jquery-contextmenu插件的步骤讲解
2019/01/27 jQuery
javascript的this关键字详解
2019/05/20 Javascript
Vue编程式跳转的实例代码详解
2019/07/10 Javascript
在vue中使用echars实现上浮与下钻效果
2019/11/08 Javascript
jquery获取input输入框中的值
2019/11/13 jQuery
IDEA配置jQuery, $符号不再显示黄色波浪线的问题
2020/10/09 jQuery
使用jQuery实现购物车
2020/10/29 jQuery
整理Python最基本的操作字典的方法
2015/04/24 Python
Django中数据库的数据关系:一对一,一对多,多对多
2018/10/21 Python
python实现微信自动回复机器人功能
2019/07/11 Python
Python的bit_length函数来二进制的位数方法
2019/08/27 Python
浅谈Python中的模块
2020/06/10 Python
外贸业务员的岗位职责
2013/11/23 职场文书
如何写一封打动人心的求职信
2014/02/17 职场文书
2014年清明节寄语
2014/04/03 职场文书
优秀大学生事迹材料
2014/12/24 职场文书
父亲节感言
2015/08/03 职场文书
毕业生的自我鉴定表范文
2019/05/16 职场文书
JS新手入门数组处理的实用方法汇总
2021/04/07 Javascript