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
基于mysql的论坛(6)
Oct 09 PHP
The specified CGI application misbehaved by not returning a complete set of HTTP headers
Mar 31 PHP
解析PHP实现多进程并行执行脚本
Jun 18 PHP
php环境无法上传文件的解决方法
Apr 30 PHP
CI框架在CLI下执行占用内存过大问题的解决方法
Jun 17 PHP
从零开始学YII2框架(六)高级应用程序模板
Aug 20 PHP
在Nginx上部署ThinkPHP项目教程
Feb 02 PHP
PHP常用技巧汇总
Mar 04 PHP
Yii2增删改查之查询 where参数详细介绍
Aug 08 PHP
php 判断字符串编码是utf-8 或gb2312实例
Nov 01 PHP
php获取字符串前几位的实例(substr返回字符串的子串用法)
Mar 08 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 adodb分页实现代码
2009/03/19 PHP
Zend的Registry机制的使用说明
2013/05/02 PHP
PHP中redis的用法深入解析
2014/02/20 PHP
PHP实现将base64编码字符串转换成图片示例
2018/06/22 PHP
PHP-FPM和Nginx的通信机制详解
2019/02/01 PHP
tp5框架的增删改查操作示例
2019/10/31 PHP
Web版彷 Visual Studio 2003 颜色选择器
2007/01/09 Javascript
用javascript做拖动布局的思路
2008/05/31 Javascript
JQuery 学习笔记 选择器之五
2009/07/23 Javascript
jquery选择器、属性设置用法经验总结
2013/09/08 Javascript
控制input输入框中提示信息的显示和隐藏的方法
2014/02/12 Javascript
Javascript高级技巧分享
2014/02/25 Javascript
js实现鼠标滑过文字链接色彩变化的效果
2015/05/06 Javascript
Ajax和Comet技术总结
2017/02/19 Javascript
js读取本地文件的实例
2017/12/22 Javascript
express+vue+mongodb+session 实现注册登录功能
2018/12/06 Javascript
node将geojson转shp返回给前端的实现方法
2019/05/29 Javascript
JSX在render函数中的应用详解
2019/09/04 Javascript
JavaScript 正则应用详解【模式、欲查、反向引用等】
2020/05/13 Javascript
python提取字典key列表的方法
2015/07/11 Python
Tensorflow环境搭建的方法步骤
2018/02/07 Python
python opencv实现旋转矩形框裁减功能
2018/07/25 Python
pandas dataframe添加表格框线输出的方法
2019/02/08 Python
python实现简单聊天室功能 可以私聊
2019/07/12 Python
Python 图像对比度增强的几种方法(小结)
2019/09/25 Python
Python 3.10 的首个 PEP 诞生,内置类型 zip() 迎来新特性(推荐)
2020/07/03 Python
CSS3 clip-path 用法介绍详解
2018/03/01 HTML / CSS
爱淘宝:淘宝网购物分享平台
2017/04/28 全球购物
美国和加拿大房车出售在线分类广告:RVT.com
2018/04/23 全球购物
《列夫托尔斯泰》教学反思
2014/02/10 职场文书
亲子读书活动方案
2014/02/22 职场文书
投资协议书范本
2014/04/21 职场文书
竞选学委演讲稿
2014/09/13 职场文书
思想工作总结范文
2015/08/12 职场文书
2016同学毕业寄语大全
2015/12/04 职场文书
九年级化学教学反思
2016/02/22 职场文书