3

我正在使用以下代码查询维基百科,但我总是收到错误(403 禁止)。但是,当我在浏览器中键入完全相同的 url 时,它可以工作。我之前一直在使用相同的代码来查询其他 web api,所以我不确定是什么导致了问题。

    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

编辑

我给出的建议很笼统。请遵守您下载网站的政策,因为欺骗浏览器用户代理可能违反政策或默认被视为恶意:

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

不要为你的机器人复制浏览器的用户代理,因为浏览器用户代理的类似机器人的行为将被认为是恶意的。

于 2011-11-12T16:07:30.680 回答