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 图片上传实现代码 带详细注释
Apr 29 PHP
PHP mcrypt可逆加密算法分析
Jul 19 PHP
PHP 杂谈《重构-改善既有代码的设计》之一 重新组织你的函数
Apr 09 PHP
PHP中防止直接访问或查看或下载config.php文件的方法
Jul 07 PHP
PHP flock 文件锁详细介绍
Dec 29 PHP
php中time()和mktime()方法的区别
Sep 28 PHP
一个简单的PHP验证码实现代码
May 10 PHP
PHP单例模式详解及实例代码
Dec 21 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
Jul 22 PHP
swoole_process实现进程池的方法示例
Oct 29 PHP
laravel-admin 后台表格筛选设置默认的查询日期方法
Oct 03 PHP
php7连接MySQL实现简易查询程序的方法
Oct 13 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 MySQL与分页效率
2008/06/04 PHP
phpadmin如何导入导出大数据文件及php.ini参数修改
2013/02/18 PHP
php实现汉字验证码和算式验证码的方法
2015/03/07 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
2020/02/21 PHP
推荐一些非常不错的javascript学习资源站点
2007/08/29 Javascript
JavaScript中数组的排序、乱序和搜索实现代码
2011/11/30 Javascript
JQuery操作iframe父页面与子页面的元素与方法(实例讲解)
2013/11/20 Javascript
jquery遍历checkbox介绍
2014/02/21 Javascript
JavaScript实现向setTimeout执行代码传递参数的方法
2015/04/16 Javascript
JS 实现 ajax 异步浏览器兼容问题
2017/01/21 Javascript
JavaScript自定义文本框光标
2017/03/05 Javascript
vuejs实现本地数据的筛选分页功能思路详解
2017/11/15 Javascript
微信小程序使用progress组件实现显示进度功能【附源码下载】
2017/12/12 Javascript
webpack+vue2构建vue项目骨架的方法
2018/01/09 Javascript
浅谈webpack 自动刷新与解析
2018/04/09 Javascript
node.js到底要不要加分号浅析
2018/07/11 Javascript
基于vue中对鼠标划过事件的处理方式详解
2018/08/22 Javascript
vue: WebStorm设置快速编译运行的方法
2018/10/18 Javascript
一文快速了解JQuery中的AJAX
2019/05/31 jQuery
vuex 中插件的编写案例解析
2019/06/10 Javascript
[42:00]完美世界DOTA2联赛PWL S3 Phoenix vs INK ICE 第一场 12.13
2020/12/17 DOTA
python脚本监控Tomcat服务器的方法
2018/07/06 Python
从0开始的Python学习014面向对象编程(推荐)
2019/04/02 Python
pycharm运行scrapy过程图解
2019/11/22 Python
浅析Python3 pip换源问题
2020/01/06 Python
Tensorflow的梯度异步更新示例
2020/01/23 Python
PyCharm 2020.2.2 x64 下载并安装的详细教程
2020/10/15 Python
python中用Scrapy实现定时爬虫的实例讲解
2021/01/18 Python
python实现按日期归档文件
2021/01/30 Python
南京某公司笔试题
2013/01/27 面试题
Delphi CS笔试题
2014/01/04 面试题
酒店副总经理岗位职责范本
2014/02/04 职场文书
初中升旗仪式演讲稿
2014/05/08 职场文书
实习科室评语
2015/01/04 职场文书
2015年复活节活动总结
2015/02/27 职场文书
浅谈pytorch中的dropout的概率p
2021/05/27 Python