C# WebClient.DownloadFile对URI的具体要求是什么?

C# WebClient.DownloadFile对URI的具体要求是什么?,c#,webclient-download,C#,Webclient Download,我对代码很在行,它对我的其他解决方案非常有用。我有一个知识缺口,因为我不理解URI的构成。这应该有效,但不能: 现在我想这不是一个文件,对吗?不过,将上述内容放到浏览器上会提供一个文件。异常消息为“基础连接已关闭:接收时发生意外错误。” URI: 您已经获得了一个完全有效的URI。不过,目标服务器可能会以不同于您预期的方式响应请求。例如,取决于您的web客户端。要调试此类问题,请使用curl curl -v https://www.nasdaq.com/screening/companies-

我对代码很在行,它对我的其他解决方案非常有用。我有一个知识缺口,因为我不理解URI的构成。这应该有效,但不能:

现在我想这不是一个文件,对吗?不过,将上述内容放到浏览器上会提供一个文件。异常消息为“基础连接已关闭:接收时发生意外错误。”

URI:
您已经获得了一个完全有效的URI。不过,目标服务器可能会以不同于您预期的方式响应请求。例如,取决于您的web客户端。要调试此类问题,请使用
curl

curl -v https://www.nasdaq.com/screening/companies-by-name.aspx?letter=0&exchange=nasdaq&render=download
上面的命令显示服务器没有使用预期的csv文件进行回复。这在代码中不是问题。您可以尝试使用curl-H标志假装一个不同的用户代理,或者设置一些重定向选项,直到您到达那里


在您的特定情况下,似乎是头
接受编码:gzip
解决了这个问题。

您的代码是什么
WebClient.DownloadFile(…
,请在问题中提供它。我无法访问您的链接,但是的,这是一个URL,可以传递到
DownloadFile
。服务器的响应方式可能涉及大量因素,这意味着在某些情况下(例如,如果您已经在该站点上建立了会话,则通过浏览器)它会给你一个文件,在其他情况下,你会得到一个错误。这正是网络的本质。现在,可能是这个URL做了奇怪的重定向,浏览器会处理,而
下载文件
不会。同样,我无法访问它来评估这一点。嗯,单击上面我自己的链接不起作用。如果我复制到记事本和pas中请输入她使用的浏览器。尝试一下。我已编辑,以便在问题中也包含HTML链接。WebClient需要:
ServicePointManager.SecurityProtocol=SecurityProtocolType.Tls12;
和不支持最近安全升级的用户代理。请使用Internet Explorer/Edge标题:
Mozilla/5.0(Windows NT 10;WOW64;Trident/7.0;rv:11.0)如Gecko
。下载将完成。安全协议为
HSTS
:。WebRequest/WebResponse不支持这一点,因此当服务器认为它可以使用它时,连接就会出现故障。
curl -v https://www.nasdaq.com/screening/companies-by-name.aspx?letter=0&exchange=nasdaq&render=download