1

こんにちは、次の API を使用して mediawiki からデータを取得しています。この URL をコピーしてブラウザーに貼り付けると、xml 応答が表示されます。 http://en.wikipedia.org/w/api.php?action=query&prop=revisions&titles=API|Main_Page&rvprop=timestamp|ユーザー|コメント|コンテンツ

しかし、curl を使用しようとすると、「スクリプトは連絡先情報を含む有益な User-Agent 文字列を使用する必要があります。そうしないと、通知なしで IP ブロックされる可能性があります。」というエラーが表示されます。

これには次のコードを使用しています。誰でも私のエラーを追跡できますか?

$url='http://en.wikipedia.org/w/api.php?action=query&prop=revisions&titles=API|Main_Page&rvprop=timestamp|user|comment|content';
$curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url); 
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        //curl_setopt($curl, CURLOPT_TIMEOUT, 1); 
        $objResponse = curl_exec($curl);
        curl_close($curl);

        echo $objResponse;die;
4

2 に答える 2

0

これは、リファラーユーザーエージェントのチェックをバイパスするために機能します。

    <?php


    function getwiki($url="", $referer="", $userAgent="") {
        if($url==""||$referer==""||$userAgent=="") { return false;};
        $headers[] = 'Accept: image/gif, image/x-bitmap, image/jpeg, image/pjpeg';
        $headers[] = 'Connection: Keep-Alive';
        $headers[] = 'Content-type: application/x-www-form-urlencoded;charset=UTF-8';
        $user_agent = $userAgent;
        $process = curl_init($url);
        curl_setopt($process, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($process, CURLOPT_HEADER, 0);
        curl_setopt($process, CURLOPT_USERAGENT, $user_agent);
        curl_setopt($process, CURLOPT_REFERER, $referer);
        curl_setopt($process, CURLOPT_TIMEOUT, 30);
        curl_setopt($process, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($process, CURLOPT_FOLLOWLOCATION, 1);
        $return = curl_exec($process);
        curl_close($process);
        return $return;
    }

    //edited to include Adam Backstrom's sound advice
    echo getwiki('http://en.wikipedia.org/w/api.php?action=query&prop=revisions&titles=API|Main_Page&rvprop=timestamp|user|comment|content', 'http://en.wikipedia.org/', 'Mozilla/5.0 (compatible; YourCoolBot/1.0; +http://yoursite.com/botinfo)');

    ?>
于 2011-05-24T15:02:31.103 に答える
0

MediaWiki API:クイック スタート ガイドから:

クライアントを適切に識別する User-Agent ヘッダーを渡します。クライアント ライブラリのデフォルトの User-Agent を使用せず、MyCuteBot/0.1 のような、クライアントの名前とバージョン番号を含むカスタムの User-Agent を使用します。

ウィキメディア ウィキでは、User-Agent ヘッダーの提供に失敗したり、空または一般的なヘッダーを提供したりすると、HTTP 403 エラーでリクエストが失敗します。meta:User-Agent ポリシーを参照してください。他の MediaWiki ウィキにも同様のポリシーがある場合があります。

meta:User-Agent ポリシーから:

ボットを実行している場合は、ボットを識別し、連絡方法を提供する User-Agent ヘッダーを送信してください。例: User-Agent: MyCoolTool (+http://example.com/MyCoolToolPage/)

于 2011-05-24T15:06:26.810 に答える