我正在使用以下代码查询Wikipedia,但我总是收到错误(403禁止)。但是,当我在浏览器中键入完全相同的URL时,它可以正常工作。我之前一直在使用相同的代码来查询其他web apis,所以我不确定是什么原因导致了这个问题。
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;
}
}
答案 0 :(得分:5)
尝试将user agent header设置为与您的浏览器匹配的内容。如果这不起作用,请启动Fiddler,查看您的浏览器标题并将其复制到您的网络请求中。
http://msdn.microsoft.com/en-us/library/system.net.webclient.headers.aspx
修改
我给出的建议是通用的。请遵守您下载的网站的政策,因为欺骗浏览器用户代理可能违反政策或默认情况下被视为恶意:
http://meta.wikimedia.org/wiki/User-Agent_policy:
请勿为您的机器人复制浏览器的用户代理,因为使用浏览器的用户代理的机器人行为将被视为恶意。