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警告Cannot use a scalar value as an array的解决方法
Jan 11 PHP
关于查看MSSQL 数据库 用户每个表 占用的空间大小
Jun 21 PHP
PHP中创建图像并绘制文字的例子
Nov 19 PHP
浅谈PHP接收POST数据方式
Jun 05 PHP
php递归实现无限分类的方法
Jul 28 PHP
PHP中substr函数字符串截取用法分析
Jan 07 PHP
php实现常见图片格式的水印和缩略图制作(面向对象)
Jun 15 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
Sep 15 PHP
PHP长网址与短网址的实现方法
Oct 13 PHP
Yii2 中实现单点登录的方法
Mar 09 PHP
PHP面向对象之里氏替换原则简单示例
Apr 08 PHP
PHP设计模式之装饰器(装饰者)模式(Decorator)入门与应用详解
Dec 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
PHP5在Apache下的两种模式的安装
2006/09/05 PHP
一个PHP的ZIP压缩类分享
2014/05/04 PHP
Laravel学习教程之路由模块
2017/08/18 PHP
PHP getID3类的使用方法学习笔记【附getID3源码下载】
2019/10/18 PHP
自定义ExtJS控件之下拉树和下拉表格附源码
2013/10/15 Javascript
JQUERY 设置SELECT选中项代码
2014/02/07 Javascript
js实现特定位取反原理及示例
2014/06/30 Javascript
jquery ui bootstrap 实现自定义风格
2014/11/14 Javascript
node.js中的fs.utimes方法使用说明
2014/12/15 Javascript
js带缩略图的图片轮播效果代码分享
2015/09/14 Javascript
详解AngularJS控制器的使用
2016/03/09 Javascript
javascript 用函数实现继承详解
2016/05/28 Javascript
基于JavaScript实现右键菜单和拖拽功能
2016/11/28 Javascript
Angular2学习教程之组件中的DOM操作详解
2017/05/28 Javascript
详解基于Vue2.0实现的移动端弹窗(Alert, Confirm, Toast)组件
2018/08/02 Javascript
Nuxt.js实现校验访问浏览器类型的中间件
2018/08/24 Javascript
详解Vue项目中出现Loading chunk {n} failed问题的解决方法
2018/09/14 Javascript
[02:32]DOTA2亚洲邀请赛 C9战队出场宣传片
2015/02/07 DOTA
python调用短信猫控件实现发短信功能实例
2014/07/04 Python
Python实现子类调用父类的方法
2014/11/10 Python
python中列表元素连接方法join用法实例
2015/04/07 Python
使用SAE部署Python运行环境的教程
2015/05/05 Python
详解Python的Django框架中的Cookie相关处理
2015/07/22 Python
详细解读tornado协程(coroutine)原理
2018/01/15 Python
Python使用遗传算法解决最大流问题
2018/01/29 Python
Pandas将列表(List)转换为数据框(Dataframe)
2020/04/24 Python
日本著名的平价时尚女性购物网站:Fifth
2016/08/24 全球购物
美国受欢迎的女性牛仔裤品牌:DL1961
2016/11/12 全球购物
美国最大的网络男装服装品牌:Bonobos
2017/05/25 全球购物
城野医生官方海外旗舰店:风靡亚洲毛孔收敛水
2018/04/26 全球购物
印度购买眼镜和太阳镜网站:Coolwinks
2018/09/26 全球购物
阿联酋手表和配饰购物网站:Rivolishop
2019/11/25 全球购物
在数据文件自动增长时,自动增长是否会阻塞对文件的更新
2014/05/01 面试题
高中英语演讲稿范文
2014/04/24 职场文书
幼儿园2016年圣诞活动总结
2016/03/31 职场文书
python实现三阶魔方还原的示例代码
2021/04/28 Python