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&amp;java(三)
Oct 09 PHP
php 函数使用方法与函数定义方法
May 09 PHP
一些需要禁用的PHP危险函数(disable_functions)
Feb 23 PHP
解析PHP计算页面执行时间的实现代码
Jun 18 PHP
解决PHP4.0 和 PHP5.0类构造函数的兼容问题
Aug 01 PHP
ThinkPHP应用模式扩展详解
Jul 16 PHP
php操作MongoDB类实例
Jun 17 PHP
PHP使用数组依次替换字符串中匹配项
Jan 08 PHP
PHP读取文件的常见几种方法
Nov 03 PHP
利用ajax和PHP实现简单的流程管理
Mar 23 PHP
在 Laravel 项目中使用 webpack-encore的方法
Jul 21 PHP
在laravel-admin中列表中禁止某行编辑、删除的方法
Oct 03 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源代码数组统计count分析
2011/08/02 PHP
Smarty日期时间操作方法示例
2016/11/15 PHP
PHP使用Nginx实现反向代理
2017/09/20 PHP
Locate a File Using a File Open Dialog Box
2007/06/18 Javascript
javascript实现上传图片前的预览(TX的面试题)
2007/08/20 Javascript
jquery.alert 弹出式复选框实现代码
2009/06/15 Javascript
js实现编辑div节点名称的方法
2014/12/17 Javascript
JavaScript控制按钮可用或不可用的方法
2015/04/03 Javascript
js实现同一个页面多个渐变效果的方法
2015/04/10 Javascript
node.js中 stream使用教程
2016/08/28 Javascript
jQuery中常用动画效果函数(日常整理)
2016/09/17 Javascript
canvas红包照片实例分享
2017/02/28 Javascript
nodejs操作mysql实现增删改查的实例
2017/05/28 NodeJs
npm 更改默认全局路径以及国内镜像的方法
2018/05/16 Javascript
Vue+webpack+Element 兼容问题总结(小结)
2018/08/16 Javascript
在vue 中使用 less的教程详解
2018/09/26 Javascript
vue弹出框组件封装实例代码
2019/10/31 Javascript
Python 获取新浪微博的最新公共微博实例分享
2014/07/03 Python
Python的time模块中的常用方法整理
2015/06/18 Python
python机器学习理论与实战(五)支持向量机
2018/01/19 Python
Python 实现网页自动截图的示例讲解
2018/05/17 Python
Python numpy数组转置与轴变换
2019/11/15 Python
pyftplib中文乱码问题解决方案
2020/01/11 Python
遮罩层 + Iframe实现界面自动显示的示例代码
2020/04/26 HTML / CSS
伯利陶器:Burleigh Pottery
2018/01/03 全球购物
怀旧收藏品和经典纪念品:Betty’s Attic
2018/08/29 全球购物
印度服装购物网站:Limeroad
2018/09/26 全球购物
bonprix匈牙利:女士、男士和儿童服装
2019/07/19 全球购物
个人找工作自荐信格式
2013/09/21 职场文书
学校门卫工作职责
2013/12/07 职场文书
《理想》教学反思
2014/02/17 职场文书
幼儿园安全责任书
2014/04/14 职场文书
申报优秀教师材料
2014/12/16 职场文书
暑期社会实践个人总结
2015/03/06 职场文书
《卧薪尝胆》读后感3篇
2019/12/26 职场文书
Django对接elasticsearch实现全文检索的示例代码
2021/08/02 Python