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伪造referer突破网盘禁止外连的代码
Jun 15 PHP
php简单分页类实现方法
Feb 26 PHP
php按字符无乱码截取中文的方法
Mar 27 PHP
php获取网页上所有链接的方法
Apr 03 PHP
php使用curl打开https网站的方法
Jun 17 PHP
微信公众平台DEMO(PHP)
May 04 PHP
PHP使用strrev翻转中文乱码问题的解决方法
Jan 13 PHP
php使用parse_str实现查询字符串解析到变量中的方法
Feb 17 PHP
解决PHP 7编译安装错误:cannot stat ‘phar.phar’: No such file or directory
Feb 25 PHP
ThinkPHP实现附件上传功能
Apr 27 PHP
php+jQuery实现的三级导航栏下拉菜单显示效果
Aug 10 PHP
PHP正则表达式笔记与实例详解
May 09 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
基于session_unset与session_destroy的区别详解
2013/06/03 PHP
PHP Cookei记录用户历史浏览信息的代码
2016/02/03 PHP
ThinkPHP Where 条件中常用表达式示例(详解)
2017/03/31 PHP
PHP策略模式定义与用法示例
2017/07/27 PHP
php实现的redis缓存类定义与使用方法示例
2017/08/09 PHP
laravel 5异常错误:FatalErrorException in Handler.php line 38的解决
2017/10/12 PHP
利用Ext Js生成动态树实例代码
2008/09/08 Javascript
JS 图片缩放效果代码
2010/06/09 Javascript
将string解析为json的几种方式小结
2010/11/11 Javascript
jQuery ajax 路由和过滤器使用说明
2011/08/02 Javascript
推荐40个简单的 jQuery 导航插件和教程(下篇)
2012/09/14 Javascript
JavaScript建立一个语法高亮输入框实现思路
2013/02/26 Javascript
javascript完美拖拽的实现方法
2013/09/29 Javascript
jquery如何判断表格同一列不同行input数据是否重复
2014/05/14 Javascript
JS 打印功能代码可实现打印预览、打印设置等
2014/10/31 Javascript
Bootstrap Table实现定时刷新数据的方法
2018/08/13 Javascript
jquery实现上传文件进度条
2020/03/26 jQuery
Vue select 绑定动态变量的实例讲解
2020/10/22 Javascript
python分析apache访问日志脚本分享
2015/02/26 Python
python实现图片处理和特征提取详解
2017/11/13 Python
Python定义一个跨越多行的字符串的多种方法小结
2018/07/19 Python
Python面向对象之类和对象属性的增删改查操作示例
2018/12/14 Python
python 字符串格式化的示例
2020/09/21 Python
Python爬虫获取op.gg英雄联盟英雄对位胜率的源码
2021/01/29 Python
德国原装品牌香水、化妆品和手表网站:BRASTY.DE
2016/10/16 全球购物
欧舒丹加拿大官网:L’Occitane加拿大
2017/10/29 全球购物
.net软件工程师应聘上机试题
2015/03/10 面试题
11月红领巾广播稿
2014/01/17 职场文书
酒后驾驶检讨书
2014/01/27 职场文书
《诚实与信任》教学反思
2014/04/10 职场文书
市级青年文明号申报材料
2014/05/26 职场文书
护理专业求职信
2014/06/15 职场文书
目标责任书格式
2014/07/28 职场文书
党员承诺书格式范文
2015/04/28 职场文书
2015年信息技术教研组工作总结
2015/07/22 职场文书
Pytest中conftest.py的用法
2021/06/27 Python