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 相关文章推荐
加速XP搜索功能堪比vista
Mar 22 PHP
为PHP初学者的8点有效建议
Nov 20 PHP
深入理解PHP原理之Session Gc的一个小概率Notice
Apr 12 PHP
简单的PHP多图上传小程序代码
Jul 17 PHP
php导入导出excel实例
Oct 25 PHP
PHP文件锁函数flock()详细介绍
Nov 18 PHP
CodeIgniter针对lighttpd服务器URL重写的方法
Jun 10 PHP
win7 wamp 64位 php环境开启curl服务遇到的问题及解决方法
Sep 16 PHP
PHP中“=&gt;
Mar 01 PHP
PHP的微信支付接口使用方法讲解
Mar 08 PHP
PHP进阶学习之命名空间基本用法分析
Jun 18 PHP
php操作redis数据库常见方法实例总结
Feb 20 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 读取文件的正确方法
2009/04/29 PHP
ecshop 订单确认中显示省市地址信息的方法
2010/03/15 PHP
php数组函数序列之krsort()- 对数组的元素键名进行降序排序,保持索引关系
2011/11/02 PHP
PHP实现HTML生成PDF文件的方法
2014/11/07 PHP
PHP判断是否是微信打开还是浏览器打开的方法
2019/02/27 PHP
Javascript 类型转换方法
2010/10/24 Javascript
jQuery获取地址栏参数插件(模仿C#)
2010/10/26 Javascript
js 异步操作回调函数如何控制执行顺序
2013/12/24 Javascript
jQuery源码分析之Callbacks详解
2015/03/13 Javascript
jQuery简单设置文本框回车事件的方法
2016/08/01 Javascript
javaScript实现滚动条事件详解
2020/03/24 Javascript
Vue实现动态添加或者删除对象和对象数组的操作方法
2018/09/21 Javascript
vue cli安装使用less的教程详解
2019/07/12 Javascript
vue实现购物车功能(商品分类)
2020/04/20 Javascript
javascript自定义加载loading效果
2020/09/15 Javascript
夯基础之手撕javascript继承详解
2020/11/09 Javascript
python对配置文件.ini进行增删改查操作的方法示例
2017/07/28 Python
python技能之数据导出excel的实例代码
2017/08/11 Python
解决seaborn在pycharm中绘图不出图的问题
2018/05/24 Python
Python基于分析Ajax请求实现抓取今日头条街拍图集功能示例
2018/07/19 Python
使用Python实现租车计费系统的两种方法
2018/09/29 Python
python中的print()输出
2019/04/12 Python
wxPython实现文本框基础组件
2019/11/18 Python
python关于调用函数外的变量实例
2019/12/26 Python
解决Python import docx出错DLL load failed的问题
2020/02/13 Python
Bandier官网:奢侈、时尚前卫的健身服装首选目的地
2020/07/05 全球购物
培训讲师邀请函
2014/01/10 职场文书
应用数学专业求职信
2014/03/14 职场文书
《孙权劝学》教学反思
2014/04/23 职场文书
自我推荐信范文
2014/05/09 职场文书
报名委托书
2015/01/29 职场文书
2015年七七事变78周年纪念活动方案
2015/05/06 职场文书
退休职工欢送会致辞
2015/08/01 职场文书
《坐井观天》教学反思
2016/02/18 职场文书
写作技巧:优秀文案必备的3种结构
2019/08/19 职场文书
JS实现数组去重的11种方法总结
2022/04/04 Javascript