file_get_contents在网址上返回一个空字符串:http://thepiratebay.org/search/a
当它显然不是空的时候。 也试过卷曲,继承我的代码
$ch = curl_init();
$cookieFile = 'cookies.txt';
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieFile);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookieFile);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_TIMEOUT, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)');
$url = 'http://thepiratebay.org/search/a';
curl_setopt($ch, CURLOPT_URL,$url);
$html = curl_exec ($ch);
var_dump($html);
$html = file_get_contents($url);
var_dump($html);
curl_close ($ch); unset($ch);
输出是:
string(143) "HTTP/1.1 200 OK
X-Powered-By: PHP/5.3.8
Content-type: text/html
Content-Length: 0
Date: Mon, 14 Nov 2011 20:27:01 GMT
Server: lighttpd
"
string(0) ""
如果我通过删除2个字符将网址更改为“http://thepiratebay.org/search”,一切正常,我得到了很好的答复。
任何想法?
答案 0 :(得分:2)
问题是您尝试使用CURLOPT_TIMEOUT
设置用户代理字符串。尝试使用CURLOPT_USERAGENT
,这应该可以解决您的问题。如果您更愿意使用file_get_contents
,则可以使用stream_context_create
或ini_set
同时执行此操作。
http://www.seopher.com/articles/how_to_change_your_php_user_agent_to_avoid_being_blocked_when_using_curl提供了所有这三种技术的示例。
答案 1 :(得分:0)
file_get_contents
可能无法在您的安装中打开网址。见fopen_wrappers。或者,由于file_get_contents
电话上的用户代理,thepiratebay.org可能会阻止您。尝试传递context。或者也许它没有返回任何内容,因为您没有像file_get_contents
那样在curl
电话中发送任何Cookie。最重要的是,即使URL相同,请求也是不同的。