【问题标题】:C# System.Net.WebException: 'Too many automatic redirections were attempted.'C# System.Net.WebException:“尝试了太多自动重定向。”
【发布时间】:2018-07-31 03:40:15
【问题描述】:

我想使用 webclient 下载一个 68kb 的 zip 文件,但出现错误: C# System.Net.WebException: '尝试了太多自动重定向。'

关于此帖子是重复帖子: 解决方案在:Why i'm getting exception: Too many automatic redirections were attempted on webclient? 不要让我的代码在下面工作并下载 zip 文件。 如何编辑才能更好地解释?

我的代码:

var url_from = "http://www1.caixa.gov.br/listaweb/Lista_imoveis_RJ.zip";
            var _to = @"F:\folder\file.zip";

            using (var client = new WebClient())
            {
                client.DownloadFile(url_from, _to);
            }

我也尝试过异步方式,但它生成的是空的 zip 文件。 像这样:How do I download zip file in C#? 还有这个:How can I download a ZIP file from a URL using C#?

【问题讨论】:

  • 重复的重复的。重定向与异步或文件类型无关。 服务器 向您的客户端发送了如此多的 302 响应,以至于一旦达到重定向限制就放弃了。可能服务器有问题,或者您需要提供凭据
  • 如果您在浏览器中尝试该链接,您会看到您被重定向到https: URL。试试这个,而不是http:。出于安全原因,所有站点都切换到https:,因此您不妨避免浪费http: 调用
  • 我尝试使用 HTTPS 并得到同样的错误。 System.Net.WebException: '自动重定向尝试次数过多。'
  • 这是一个服务器错误和一个可耻的不安全实现 - HTTPS 和 HTTP 请求都被重定向到 HTTP 并添加了 security=true cookie。幸好没有黑客会想到拦截和更改该 zip 文件的内容!

标签: c# zip webclient


【解决方案1】:

这是由错误的服务器实现引起的。如果您使用 Fiddler,您会看到服务器将 HTTPS 和 HTTP 连接都重定向到 same HTTP url,并添加了一个 security=true cookie。

通过 HTTP 调用特别有趣:

  1. 第一个 HTTP 重定向到 HTTPS URL
  2. HTTPS 使用 security=true cookie 重定向回原始 HTTP
  3. 如果 cookie 不存在,则循环再次开始

这意味着:

  • 没有安全措施。任何东西都可以拦截该调用并更改或替换文件的内容。希望您不要尝试通过 WiFi 下载此文件!
  • 除非您存储 cookie 或自行添加,否则服务器将导致无限重定向循环。

WebClient 无法存储 cookie。它是一个过时的类,在只需要下载页面和文件时创建。它的所有功能以及更多功能都由 HttpClient 类提供。

不过,在这种情况下,您可以自己添加 cookie 作为标头并避免重定向,并且仍然通过 HTTPS 下载文件

WebClient 是一个过时的类。它是为简单的文件和页面请求而创建的,并且

var url_from = "https://www1.caixa.gov.br/listaweb/Lista_imoveis_RJ.zip";
using (var client = new System.Net.WebClient())
{
    client.Headers.Add(System.Net.HttpRequestHeader.Cookie, "security=true");
    client.DownloadFile(url_from, _to);
}

这将导致一次调用并通过 HTTP 下载文件

【讨论】:

  • 非常感谢。 Istead of the post似乎重复了你的建议很简单,我会帮很多忙。谢谢。在添加 {client.Headers.Add} 行代码后工作。很棒的分析!
猜你喜欢
  • 1970-01-01
  • 2017-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多