php curl请求信息和返回信息设置代码实例
发布:smiling 来源: PHP粉丝网 添加日期:2021-05-23 15:17:21 浏览: 评论:0
在用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;
- }
Tags: curl请求信息 curl返回信息
- 上一篇:PHP rsa加密解密使用方法
- 下一篇:php结合安卓客户端实现查询交互实例
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)