当我使用curl时,CURLOPT_NOBODY会影响响应头

时间:2012-12-01 16:19:50

标签: php curl http-headers

我的问题代码

<?php
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'http://www.tudou.com/programs/view/qyT7G6gVFSs');
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl , CURLOPT_NOBODY, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($curl);
curl_close($curl);
var_dump($data);

回应是

string(241)“HTTP / 1.1 405方法不允许 服务器:Tengine / 1.4.0 日期:星期六,2012年12月1日15:53:32 GMT Content-Type:text / html; charset = GBK 内容长度:1085 连接:关闭 appSrv:itemview-app4-app_admin 变化:接受编码 允许:GET “

然后我的正确代码是

<?php
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'http://www.tudou.com/programs/view/qyT7G6gVFSs');
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($curl);
curl_close($curl);
var_dump($data);

结果是 string(313)“HTTP / 1.1 302暂时移动 服务器:Tengine / 1.4.0 日期:星期六,2012年12月1日16:17:25 GMT 内容长度:0 连接:关闭 appSrv:itemview-app5-app_admin 变化:接受编码 Pragma:No-Cache 缓存控制:无缓存,无存储 到期日:1970年1月1日星期四00:00:00 GMT 地点:http://tv.tudou.com/

是的,只是CURLOPT_NOBODY,任何人都能告诉我原因吗?拜托!

2 个答案:

答案 0 :(得分:1)

当您指定CURLOPT_NOBODY时,它实际上执行不同类型的请求Does CURLOPT_NOBODY still download the body - using bandwidth看起来您正在卷曲的服务器不支持此类请求。

答案 1 :(得分:0)

尝试做这样的事情:

            //cURL set options
            //cURL options array set
            $options = array(
                CURLOPT_URL => $this->URL,              #set URL address
                CURLOPT_USERAGENT => $this->UserAgent,  #set UserAgent to get right content like a browser
                CURLOPT_RETURNTRANSFER => true,         #redirection result from output to string as curl_exec() result
                CURLOPT_COOKIEFILE => 'cookies.txt',    #set cookie to skip site ads
                CURLOPT_COOKIEJAR => 'cookiesjar.txt',  #set cookie to skip site ads
                CURLOPT_FOLLOWLOCATION => true,         #follow by header location
                CURLOPT_HEADER => true,                 #get header (not head) of site
                CURLOPT_FORBID_REUSE => true,           #close connection, connection is not pooled to reuse
                CURLOPT_FRESH_CONNECT => true,          #force the use of a new connection instead of a cached one
                CURLOPT_SSL_VERIFYPEER => false         #can get protected content SSL
            );
            //set array options to object $curl
            curl_setopt_array($curl, $options);