【问题标题】:Remote server (403) Forbidden error while using WebClient远程服务器 (403) 使用 WebClient 时出现禁止错误
【发布时间】:2013-11-12 00:24:15
【问题描述】:

我正在尝试使用 WebClient 查询一些 URL。

我有一个集合,我循环通过它来获取 QueryString 值,并构建最终 URL,然后将其传递给客户端。

它第一次执行良好时,我得到了正确的响应,但是,当它第二次进入循环时,我得到了错误:

System.Net.WebException --> 远程服务器返回错误:(403) Forbidden。

如果我是第一次收到回复。那我也应该去拿剩下的收藏了。

有什么线索吗?我可能会错过什么?

下面是我正在使用的代码 sn-p。

 using(System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\sample.text")) {
    foreach(var f in fileCollections) {
        strFinalURL = string.Empty;

        strFinalURL = "someURL" + f; // f can be considered as querystring param value

        try {
            using(var client = new WebClient()) {

                test = client.DownloadString(strFinalURL);
                if (!test.Contains("somecondition")) {
                    file.WriteLine("");
                }
            }
        } catch (System.Exception ex) {
            Console.WriteLine(ex.Message);
        }
    }
}

【问题讨论】:

  • 所有 URL 都来自同一个域吗?返回 403 的 URL,是否可以通过浏览器访问?
  • @codingstill 是的,所有 URL 都来自同一个域并且可以通过浏览器访问
  • 如果你所说的一切都是正确的,那么我怀疑服务器限制正在发挥作用。如果您使用战略性放置的Thread.Sleep 稍微放慢速度会发生什么?
  • 下载Fiddler并使用fiddler发送HTTP请求,查看正在接收和发送的数据。
  • @spender,是的,节流在这里发挥作用..当我放慢进程时..它起作用了......谢谢

标签: c# webclient webclient-download


【解决方案1】:

一些网络服务器可以根据它们提供的用户代理字符串来阻止请求。在您的情况下,您发送一个空字符串作为用户代理。尝试添加浏览器的用户代理,任何浏览器都可以。

例如:

client.Headers.Add("user-agent", " Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0");

对于用户代理列表,您可以单击here。

【讨论】:

  • 这为我修好了,绝对不会想到!
【解决方案2】:

如果你所说的一切都是正确的,那么我怀疑服务器限制正在发挥作用。尝试在循环中添加Thread.Sleep 以减慢速度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-01
    • 1970-01-01
    • 2012-02-23
    • 2014-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多