2012-04-23 44 views
1

我正在嘗試使用API​​來搜索維基百科,因爲用戶輸入了我的表單。因此,如果他們在表單中鍵入「貓」 ,然後API將搜索wikipedia中包含單詞「cat」的條目。我得到它的工作,但現在我的「M得到這個消息:HTTP/1.0 403使用維基百科API時出現禁止的錯誤信息

Warning: file_get_contents(http://en.wikipedia.org/w/api.php?action=opensearch&search=parrott): failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden in /var/www/html/flam1-api.php on line 22 

我讀到也許需要一個用戶代理,但我不知道究竟是什麼做這裏是我的代碼:

echo "<h1>Which LOLcat are you? Results!</h1>"; 
    $visit_id = $_COOKIE['visit_id']; 
    $all_my_variables = json_decode(file_get_contents("/var/www/html/data/$visit_id.json")); 
    //var_dump($all_my_variables); 
    $animal = $all_my_variables ->favoriteanimal; 
    echo "When searching wikipedia entries on your favorite animal, which is a $animal, we got the results:<br>"; 
    $website = file_get_contents('http://en.wikipedia.org/w/api.php?action=opensearch&search='.urlencode($animal).''); 

     echo $website[0]; 

我絕對欣賞任何幫助!

+0

請參閱[WikiMedia User-Agent policy](http://meta.wikimedia.org/wiki/User-Agent_policy)。 – svick 2012-04-23 22:49:20

回答

3

你需要(通過使用curl延伸,而不是file_get_contents也許)。通過file_get_contents使用的默認用戶代理明確阻止,因爲它往往關聯設置用戶代理虐待行爲

1

一些站點使用file_get_contents塊。 我現在沒有chnace測試,但嘗試使用此函數不是file_get_contents。

function get_url_contents($url){ 
     $crl = curl_init(); 
     $timeout = 5; 
     curl_setopt ($crl, CURLOPT_URL,$url); 
     curl_setopt ($crl, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt ($crl, CURLOPT_CONNECTTIMEOUT, $timeout); 
     $ret = curl_exec($crl); 
     curl_close($crl); 
     return $ret; 
} 
+1

問題是用戶代理。我認爲curl的默認用戶代理也被阻止,所以你必須明確地設置它。 – svick 2012-04-23 22:50:34