为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
大话西游666 2021-11-07 19:35:44
我想使用 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 文件。
查看完整描述

1 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

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

通过 HTTP 调用特别有趣:

  1. 第一个 HTTP 重定向到 HTTPS URL

  2. HTTPS 使用security=truecookie重定向回原始 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 下载文件


查看完整回答
反对 回复 2021-11-07
  • 1 回答
  • 0 关注
  • 390 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信