使用Wikipedia API时出现HTTP / 1.0 403 Forbidden错误消息

时间:2012-04-23 22:26:14

标签: php wikipedia-api

我尝试使用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];   

我非常感谢你的帮助!

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分: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;
}