3

次のコードを使用してウィキペディアにクエリを実行していますが、常にエラーが発生します(403禁止)。ただし、ブラウザにまったく同じURLを入力すると、機能します。以前に同じコードを使用して他のWebAPIを照会したことがあるため、問題の原因がわかりません。

    private static string query(string text)
    {
        text = text.Replace(" ", "%20");

        string url = "http://en.wikipedia.org/w/api.php?action=opensearch&search=" + text + "&format=json&callback=spellcheck";

        WebClient client = new WebClient();
        client.Headers.Add("User-Agent", "whatever");  // <-- this line was missing

        try
        {
            string response = client.DownloadString(url);
            return response; 
        }
        catch(Exception e)
        {
            Console.WriteLine(e.Message);
            return null; 
        }   
    }
4

1 に答える 1

5

ユーザーエージェントのヘッダーをブラウザに一致するものに設定してみてください。これが機能しない場合は、Fiddlerを起動し、ブラウザーヘッダーを確認して、Webリクエストにコピーします。

http://msdn.microsoft.com/en-us/library/system.net.webclient.headers.aspx

編集

私が与えたアドバイスは一般的でした。ブラウザのユーザーエージェントのなりすましはポリシーに違反するか、デフォルトで悪意があると見なされる可能性があるため、ダウンロード元のWebサイトのポリシーを遵守してください。

http://meta.wikimedia.org/wiki/User-Agent_policy

ブラウザのユーザーエージェントを使用したボットのような動作は悪意のあるものと見なされるため、ボットのブラウザのユーザーエージェントをコピーしないでください。

于 2011-11-12T16:07:30.680 に答える