C#System.Net.WebException:'尝试了太多的自动重定向。'

时间:2018-07-31 03:40:15

标签: c# zip webclient

我想使用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#?

1 个答案:

答案 0 :(得分:1)

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

通过HTTP调用特别有趣:

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

这意味着:

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

WebClient无法存储Cookie。当需要下载页面和文件时,这是一个过时的类。 HttpClient类提供了其所有功能以及更多功能。

在这种情况下,您可以自己添加cookie作为标头,并避免重定向,然后 still 通过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下载文件