维基百科api的卷曲错误,但通过浏览器工作

时间:2014-02-09 15:22:50

标签: php curl wikipedia-api

我想使用wikipedia api通过php和curl获取页面。 我阅读http://www.mediawiki.org/wiki/API:Main_page上的说明,我的例子类似。

目的是在给定标题的情况下自动获取电影信息。

function getWikipediaFilmUrl($filmName) {
    $apiurl = "http://it.wikipedia.org/w/api.php";

    $parameters['format'] = "json";
    $parameters['prop'] = "revisions";
    $parameters['rvprop'] = "content";
    $parameters['action'] = "query";
    $parameters['titles'] = rawurlencode(ucwords($filmName));
    $parameters['redirects'] = "";

    $fields_string = "";
    $url = "";
    foreach ($parameters as $key => $value) {
        $fields_string[] = $key . '=' . $value;
    }
    $url = $apiurl . '?' . implode('&', $fields_string);

    //debug
    print_r($parameters);
    echo "<br /><a href='$url'>Resulting URL: $url</a><hr />";
    //

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, FALSE);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 20);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.102 Safari/537.36');
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_REFERER, "");
    curl_setopt($ch, CURLOPT_HEADER, false);

    $result = curl_exec($ch);
    curl_close($ch);

    echo $result;
}

getWikipediaFilmUrl("main page");

此代码应该是主页面。生成的网址为 http://it.wikipedia.org/w/api.php?format=json&prop=revisions&rvprop=content&action=query&titles=Main%20Page&redirects= 如果您尝试使用浏览器打开它,但它可以通过curl获取,返回一个包含一般错误的页面和一个关于api用法的文本文档......

我只是想复制&amp;将生成的网址粘贴到curl调用中并且它可以正常工作....为什么地球上的$ url不起作用但它的内容是什么?!?。

1 个答案:

答案 0 :(得分:0)

更改

$url = $apiurl . '?' . implode('&amp;', $fields_string);

$url = $apiurl . '?' . implode('&', $fields_string);

你不需要逃避这些&符号,因为你没有将它们输出到HTML中,而只是将它们直接送入卷曲。