c# - WebClient 禁止打开维基百科页面?

标签 c# http webclient

这是我要运行的代码:

var wc = new WebClient();
var stream = wc.OpenRead(
             "http://en.wikipedia.org/wiki/List_of_communities_in_New_Brunswick");

但我不断收到 403 禁止错误。不明白为什么。它适用于其他页面。我可以在浏览器中正常打开页面。我该如何解决这个问题?

最佳答案

我通常不会使用 OpenRead(),请尝试使用 DownloadData()DownloadString()

也可能是维基百科故意阻止您的请求,因为您没有提供用户代理字符串:

WebClient client = new WebClient();
client.Headers.Add("user-agent", 
    "Mozilla/5.0 (Windows; Windows NT 5.1; rv:1.9.2.4) Gecko/20100611 Firefox/3.6.4");

我经常使用 WebClient,并且很快了解到如果您不提供与已知 Web 浏览器匹配的用户代理字符串,网站可以并且将会阻止您的请求。此外,如果您编写自己的用户代理字符串(例如“我的超酷网络抓取工具”),您也会被阻止。

[编辑]

我将示例用户代理字符串更改为现代版 Firefox 的用户代理字符串。我给出的原始示例是 IE6 的用户代理字符串,这不是一个好主意。为什么?某些网站可能会基于 IE6 执行过滤,并向使用该浏览器的任何人发送一条消息或发送到另一个页面,上面写着“请更新您的浏览器”——这意味着您将无法获得想要的内容。

关于c# - WebClient 禁止打开维基百科页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4811936/

相关文章:

python - 导入错误 : cannot import name 'WebClient'

c# - 尝试访问派生类中基类属性的 protected 访问器时出错

http - 使用 fiddler 更改方案

c# - 透视图像失真

java - 如何处理 Axis 1 客户端中的 HTTP 错误代码

python - 异步执行服务器端 Unix 脚本

c# - 通过 webclient 下载具有正确编码的 html 页面

c# - 如何将 byte[] 响应转换为有效的 XDocument?

c# - 防止控制台应用程序终止

c# - 从 C# 通用字典中过滤掉值