c# - 维基百科查询返回错误 403

标签 c# http wikipedia-api

我正在使用以下代码查询维基百科,但我总是收到错误(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; 
        }   
    }

最佳答案

尝试设置 user agent header与您的浏览器相匹配的内容。如果这不起作用,请启动 Fiddler , 查看您的浏览器 header 并将它们复制到您的网络请求中。

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

编辑

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

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

Do not copy a browser's user agent for your bot, as bot-like behavior with a browser's user agent will be assumed malicious.

关于c# - 维基百科查询返回错误 403,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8105602/

相关文章:

http - 缺少升级 : Serve both http and ws on netty 4. x

javascript - 如何在javascript中删除双括号内的内容

javascript - 不使用 ajax 发送自定义 header

c# - 无法访问类中的 Winforms 控件

c# - 将 Java 转换为 C#

c# - 无法加载文件或程序集 System.Runtime

c# - 如何在 iOS 上的 Unity3d 中获取 "free"内存量?

json - 无法解码 HTTP 请求中的 JSON

javascript - 哪个 Http 错误/状态代码是合适的?

node.js - 在 Node.js 中发送多个 HTTP 请求 : Not receiving any responses or timeouts