1

我正在尝试使用 API 在维基百科中搜索填写表单的用户输入的单词。因此,如果他们在表单中输入“cat”,API 将在维基百科中搜索包含“cat”一词的条目”。我让它工作了,但现在我收到了这条消息:

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];   

我绝对感谢任何帮助!

4

2 回答 2

3

您需要设置一个用户代理(也许通过使用curl扩展而不是file_get_contents)。使用的默认用户代理file_get_contents被明确阻止,因为它通常与滥用行为相关联。

于 2012-04-23T22:44:21.617 回答
1

某些站点使用 file_get_contents 阻止。我现在没有机会进行测试,但请尝试使用此函数而不是 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;
}
于 2012-04-23T22:45:46.567 回答