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 相关文章推荐
Search Engine Friendly的URL设计
Oct 09 PHP
从MySQL数据库表中取出随机数据的代码
Sep 05 PHP
PHP备份/还原MySQL数据库的代码
Jan 06 PHP
php5.3 不支持 session_register() 此函数已启用的解决方法
Nov 12 PHP
php防止网站被攻击的应急代码
Oct 21 PHP
php注册登录系统简化版
Dec 28 PHP
用PHP写的一个冒泡排序法的函数简单实例
May 26 PHP
php实现常见图片格式的水印和缩略图制作(面向对象)
Jun 15 PHP
详解PHP swoole process的使用方法
Aug 26 PHP
PHP实现的日历功能示例
Sep 01 PHP
php使用redis的几种常见操作方式和用法示例
Feb 20 PHP
phpstudy隐藏index.php的方法
Sep 21 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之短标签开启设置
2013/06/17 PHP
php将csv文件导入到mysql数据库的方法
2014/12/24 PHP
使用PHP生成二维码的方法汇总
2015/07/22 PHP
深入解析WordPress中加载模板的get_template_part函数
2016/01/11 PHP
改进:论坛UBB代码自动插入方式
2006/12/22 Javascript
JavaScript 动态创建VML的方法
2009/10/14 Javascript
jquery库或JS文件在eclipse下报错问题解决方法
2014/04/17 Javascript
基于jquery实现表格内容筛选功能实例解析
2016/05/09 Javascript
JS获取随机数和时间转换的简单实例
2016/07/10 Javascript
JS本地刷新返回上一页代码
2016/07/25 Javascript
浅谈js对象的创建和对6种继承模式的理解和遐想
2016/10/16 Javascript
jQuery双向列表选择器DIV模拟版
2016/11/01 Javascript
微信小程序  modal详解及实例代码
2016/11/09 Javascript
nodejs中使用HTTP分块响应和定时器示例代码
2017/03/19 NodeJs
带你了解session和cookie作用原理区别和用法
2017/08/14 Javascript
Angularjs 1.3 中的$parse实例代码
2017/09/14 Javascript
Vue点击切换颜色的方法
2018/09/13 Javascript
element-ui upload组件多文件上传的示例代码
2018/10/17 Javascript
通过vue写一个瀑布流插件代码实例
2019/09/07 Javascript
html中创建并调用vue组件的几种方法汇总
2020/11/17 Javascript
VUE实现吸底按钮
2021/03/04 Vue.js
Python Tkinter GUI编程入门介绍
2015/03/10 Python
pybind11和numpy进行交互的方法
2019/07/04 Python
python3连接mysql获取ansible动态inventory脚本
2020/01/19 Python
Python collections模块的使用方法
2020/10/09 Python
详解background属性的8个属性值(面试题)
2020/11/02 HTML / CSS
IE10 Error.stack 让脚本调试更加方便快捷
2013/04/22 HTML / CSS
三星加拿大官方网上商店:Samsung CA
2020/12/18 全球购物
国际商务专业职业生涯规划书范文
2014/01/17 职场文书
汽车维修专业自荐书
2014/05/26 职场文书
学校交通安全责任书
2014/08/25 职场文书
2015年双拥工作总结
2015/04/08 职场文书
离婚承诺书格式范文
2015/05/04 职场文书
Python如何使用logging为Flask增加logid
2021/03/30 Python
MATLAB 全景图切割及盒图显示的实现步骤
2021/05/14 Python
Nginx+Windows搭建域名访问环境的操作方法
2022/03/17 Servers