WebClient - 远程服务器返回错误: (403) 禁止访问

21

在浏览器中打开一个公共页面运行正常。

使用WebClient下载相同的页面会抛出 - (403) Forbidden。

这是怎么回事?

这里是在控制台应用程序上使用的快速复制/粘贴示例,用于访问特定网页:

try
{
    WebClient webClient = new WebClient();
    string content = webClient.DownloadString("http://he.wikisource.org/wiki/%D7%A9%D7%95%D7%9C%D7%97%D7%9F_%D7%A2%D7%A8%D7%95%D7%9A_%D7%90%D7%95%D7%A8%D7%97_%D7%97%D7%99%D7%99%D7%9D_%D7%90_%D7%90");
}
catch (Exception ex)
{
    throw;
}

你调用这个URL的频率有多高?你可能会被限制访问。 - Nix
不太确定,尝试了几次浏览器后改用Web客户端。现在我已经从同一网站下载了其他页面很多次,每次都可以正常工作。所以看起来只有这个页面出错了?! - dzolnjan
1
页面可能正在查看用户代理标头,并将您弹回,因为您没有提供其中之一。 - John Saunders
2个回答

64

我刚刚使用了Fiddler,以查看响应并返回以下通知和状态代码。

脚本应该使用带有联系信息的信息性用户代理字符串,否则它们可能会在没有通知的情况下被IP拦截。

这有效。

    WebClient webClient = new WebClient();
    webClient.Headers.Add("user-agent", "Only a test!");

    string content = webClient.DownloadString("http://he.wikisource.org/wiki/%D7%A9%D7%95%D7%9C%D7%97%D7%9F_%D7%A2%D7%A8%D7%95%D7%9A_%D7%90%D7%95%D7%A8%D7%97_%D7%97%D7%99%D7%99%D7%9D_%D7%90_%D7%90");

1
谢谢你,虽然这并没有解决我的问题,但是你让我找到了正确的方向。提醒那些跟随者们,首先要检查自己的安全实现。我忘记授予用户执行下载的权限,因此收到了(正确的)403消息。这与IIS服务器、客户端、用户代理或其他任何东西无关。 - The Senator
@TheSenator 谢谢,对我来说是IIS IP地址限制的问题。 - joym8

3

检查你尝试访问的服务器是否设置了改进的TLS协议。 确保将此添加到Global.asax.cs文件中。

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接