猿问

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

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

不要让我的代码在下面工作并下载 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 文件。


大话西游666
浏览 391回答 1
1回答

慕的地10843

这是由错误的服务器实现引起的。如果您使用 Fiddler,您将看到服务器将 HTTPS 和 HTTP 连接重定向到同一个HTTP url,并添加了一个security=truecookie。通过 HTTP 调用特别有趣:第一个 HTTP 重定向到 HTTPS URLHTTPS 使用security=truecookie重定向回原始 HTTP如果 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 下载文件
随时随地看视频慕课网APP
我要回答