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 set_time_limit(0) 设置程序执行时间的函数
May 26 PHP
php类中private属性继承问题分析
Nov 01 PHP
关于使用key/value数据库redis和TTSERVER的心得体会
Jun 28 PHP
PHP开发工具ZendStudio下Xdebug工具使用说明详解
Nov 11 PHP
destoon之一键登录设置
Jun 21 PHP
浅析PHP文件下载原理
Dec 25 PHP
深入php内核之php in array
Nov 10 PHP
PHP判断用户是否已经登录(跳转到不同页面或者执行不同动作)
Sep 22 PHP
PHP载入图像imagecreatefrom_gif_jpeg_png系列函数用法分析
Nov 14 PHP
Yii2.0框架实现带分页的多条件搜索功能示例
Feb 20 PHP
laravel多条件查询方法(and,or嵌套查询)
Oct 09 PHP
PHP高并发和大流量解决方案整理
Dec 24 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的网址
2006/11/25 PHP
详解配置 Apache 服务器支持 PHP 文件的解析
2017/02/15 PHP
php实现对短信验证码发送次数的限制实例讲解
2021/03/04 PHP
js no-repeat写法 背景不重复
2009/03/18 Javascript
jquery 图片Silhouette Fadeins渐显效果
2010/02/07 Javascript
JQuery,Extjs,YUI,Prototype,Dojo 等JS框架的区别和应用场景简述
2010/04/15 Javascript
UserData用法总结 lanyu出品
2010/07/01 Javascript
jquery中this的使用说明
2010/09/06 Javascript
autoIMG 基于jquery的图片自适应插件代码
2011/03/12 Javascript
js实现表单多按钮提交action的处理方法
2015/10/24 Javascript
关于javascript中dataset的问题小结
2015/11/16 Javascript
阿里巴巴技术文章分享 Javascript继承机制的实现
2016/01/14 Javascript
jQuery中的基本选择器用法学习教程
2016/04/14 Javascript
JS自动生成动态HTML验证码页面
2017/06/14 Javascript
es6学习之解构时应该注意的点
2017/08/29 Javascript
jQuery实现标签子元素的添加和赋值方法
2018/02/24 jQuery
Angular4 Select选择改变事件的方法
2018/10/09 Javascript
JS判断数组里是否有重复元素的方法小结
2019/05/21 Javascript
js实现直播点击飘心效果
2020/08/19 Javascript
vue element实现表格合并行数据
2020/11/30 Vue.js
python中的__init__ 、__new__、__call__小结
2014/04/25 Python
Python的Flask框架中@app.route的用法教程
2015/03/31 Python
在Python的web框架中配置app的教程
2015/04/30 Python
python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan)
2019/06/27 Python
tensorflow 环境变量设置方式
2020/02/06 Python
详解python环境安装selenium和手动下载安装selenium的方法
2020/03/17 Python
Python开发之身份证验证库id_validator验证身份证号合法性及根据身份证号返回住址年龄等信息
2020/03/20 Python
详解pycharm自动import所需的库的操作方法
2020/11/30 Python
最新大学职业规划书范文
2013/12/30 职场文书
应用化学专业职业生涯规划书
2013/12/31 职场文书
八一建军节营销活动方案
2014/08/31 职场文书
小学教师师德整改措施
2014/09/29 职场文书
2015年教研组工作总结
2015/05/04 职场文书
卫生保健工作总结2015
2015/05/18 职场文书
SpringCloud Function SpEL注入漏洞分析及环境搭建
2022/04/08 Java/Android
vue elementUI批量上传文件
2022/04/26 Vue.js