2011-11-14 170 views
0

的file_get_contents返回的URL爲空字符串:當它是obviosly不是空http://thepiratebay.org/search/aPHP的GET請求返回空

。 也試過嫋嫋,我的繼承人代碼

$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) "" 

如果我更改URL爲「http://thepiratebay.org/search」刪去了2個字符一切正常,並我得到了很好的迴應。

什麼想法?

回答

2

問題是,您正嘗試使用CURLOPT_TIMEOUT設置用戶代理字符串。嘗試使用CURLOPT_USERAGENT,這應該可以解決您的問題。如果您更願意使用file_get_contents,則可以使用stream_context_createini_set同時執行此操作。

所有三種技術的示例可在http://www.seopher.com/articles/how_to_change_your_php_user_agent_to_avoid_being_blocked_when_using_curl獲得。

+0

lolz,愚蠢的錯誤,ty,這是CURLOPT_USERAGENT,我結束了在python中寫這個:) – Legion

0

file_get_contents可能無法在您的安裝中打開URL。見fopen_wrappers。或者,由於file_get_contents調用中的用戶代理,thepiratebay.org可能會阻止您。嘗試通過context。或者可能它沒有返回任何東西,因爲您沒有像那樣在您的file_get_contents調用中發送任何cookie。底線,即使URL是相同的,請求是不同的。