我想以url而不是boolean的形式返回响应。我从浏览器中查找标题并匹配它,但它只返回boolean(1)。是否有一些选项缺失?
<?php
$ch = curl_init();
$url = 'http://www.tusfiles.net/anfossy50rrd';
// Post field and value
$post = array(
'op' => 'download2',
'id' => 'anfossy50rrd',
'rand' => 'q56tfpiklusrizipkforyjqsykxzqlsi7ur3hyi',
'referer' => '',
'method_free' => '',
'method_premium' => '',
'down_script' => '1'
);
标题
$headers = [
'Host: www.tusfiles.net',
'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:28.0) Gecko/20100101 Firefox/28.0',
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language: en-US,en;q=0.5',
'Accept-Encoding: gzip, deflate',
'Cache-Control: no-cache',
'Content-Type: application/x-www-form-urlencoded; charset=utf-8',
'Referer: http://www.tusfiles.net/anfossy50rrd',
'Cookie: lang=english; login=lynxpravoka; xfss=; aff=2513158; __atuvc=17%7C36;
__atuvs=57cf088127fd55f9004; cookiescriptaccept=visit',
'Connection: keep-alive',
'Upgrade-Insecure-Requests: 1'
];
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POSTFIELDS,$post);
$server_output = curl_exec ($ch);
print_r($server_output);
?>
答案 0 :(得分:0)
您需要使用以下内容:
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'X-Header-1: value1',
'X-Header-2: value2'
));
或者您也可以构建一个数组,其中键是标题名称,值当然是标题值。它看起来像这样:
$headers = array(
'Host' => 'www.tusfiles.net',
'User-Agent' => 'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:28.0) Gecko/20100101 Firefox/28.0'
);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
答案 1 :(得分:0)
问题是服务器返回HTTP/1.1 302 Found
HTTP重定向,期望您将请求发送到“找到”的URL。但是因为你没有CURLOPT_FOLLOWLOCATION - 你也没有手动处理重定向(也没有读取重定向标题),所以你不遵循重定向。启用CURLOPT_FOLLOWLOCATION
,您应该得到回复。
另外,你几乎不应该用curl手动给出'Accept-Encoding:gzip,deflate'标题。如果实际上没有用gzip或deflate编译curl并且服务器决定使用它,那么传输将失败,此外,如果将来服务器和curl都支持更好的传输编码,它将不会被使用,因为你明确表示只支持gzip / deflate。相反,make curl会自动给出所有支持的编码,方法是给CURLOPT_ENCODING一个空字符串。
和protip:将来,要调试为什么curl传输不能按预期工作,启用CURLOPT_VERBOSE