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 学习路线与时间表
Feb 21 PHP
《PHP编程最快明白》第四讲:日期、表单接收、session、cookie
Nov 01 PHP
php curl常见错误:SSL错误、bool(false)
Dec 28 PHP
基于PHP生成静态页的实现方法
May 10 PHP
PHP Cookie的使用教程详解
Jun 03 PHP
探讨php中防止SQL注入最好的方法是什么
Jun 10 PHP
探讨:parse url解析URL,返回其组成部分
Jun 14 PHP
php实现信用卡校验位算法THE LUHN MOD-10示例
May 07 PHP
帝国cms常用标签汇总
Jul 06 PHP
PHP开发Apache服务器配置
Jul 15 PHP
Yii 2.0中场景的使用教程
Jun 02 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向socket服务器收发数据的方法
2015/01/24 PHP
ThinkPHP3.2.2的插件控制器功能
2015/03/05 PHP
php实现的简单检验登陆类
2015/06/18 PHP
PHP闭包函数传参及使用外部变量的方法
2016/03/15 PHP
php构造函数与析构函数
2016/04/23 PHP
PHP实现与java 通信的插件使用教程
2019/08/11 PHP
PHP实现一个按钮点击上传多个图片操作示例
2020/01/23 PHP
Gambit vs ForZe BO3 第二场 2.13
2021/03/10 DOTA
jquery实现带单选按钮的表格行选中时高亮显示
2013/08/01 Javascript
通过length属性判断jquery对象是否存在
2013/10/18 Javascript
JavaScript极简入门教程(三):数组
2014/10/25 Javascript
RequireJS使用注意细节
2016/05/15 Javascript
原生js仿jquery animate动画效果
2016/07/13 Javascript
JS使用onerror捕获异常示例
2016/08/03 Javascript
jstl中判断list中是否包含某个值的简单方法
2016/10/14 Javascript
js基于myFocus实现轮播图效果
2017/02/14 Javascript
微信小程序 跳转传参数与传对象详解及实例代码
2017/03/14 Javascript
bootstrap如何让dropdown menu按钮式下拉框长度一致
2017/04/10 Javascript
详解webpack-dev-server使用http-proxy解决跨域问题
2018/01/13 Javascript
浅谈vue项目重构技术要点和总结
2018/01/23 Javascript
详解angular应用容器化部署
2018/08/14 Javascript
js实现图片区域可点击大小随意改变(适用移动端)代码实例
2019/09/11 Javascript
一篇文章带你浅入webpack的DLL优化打包
2020/02/20 Javascript
Python 功能和特点(新手必学)
2015/12/30 Python
Django自定义过滤器定义与用法示例
2018/03/22 Python
基于Tensorflow使用CPU而不用GPU问题的解决
2020/02/07 Python
python Shapely使用指南详解
2020/02/18 Python
使用PyQt的QLabel组件实现选定目标框功能的方法示例
2020/05/19 Python
keras实现多种分类网络的方式
2020/06/11 Python
沙特阿拉伯家用电器和电子产品购物网站:Sheta and Saif
2020/04/03 全球购物
Shopbop中文官网:美国亚马逊旗下时尚购物网站
2020/12/15 全球购物
命名空间(namespace)和程序集(Assembly)有什么区别
2015/09/25 面试题
MySQL pt-slave-restart工具的使用简介
2021/04/07 MySQL
Go语言-为什么返回值为接口类型,却返回结构体
2021/04/24 Golang
教你怎么用Python生成九宫格照片
2021/05/20 Python
Python 中的Sympy详细使用
2021/08/07 Python