我正试图从imdb下载一个json网页,以找到一个演员。
try
{
using (WebClient wc = new WebClient())
{
string content = wc.DownloadString("https://v2.sg.media-imdb.com/suggests/names/b/brad.json");
}
}
catch (WebException x)
{
x.ToString();
}无论何时我尝试下载。
例外是:
The underlying connection was closed: An unexpected error occurred on a send.内部网络例外是:
Received an unexpected EOF or 0 bytes from the transport stream.据我所知。这是因为imdb的一个服务器配置错误。
为了解决这个问题,我用
System.Net.ServicePointManager.SecurityProtocol = (System.Net.SecurityProtocolType)(3072);将安全协议设置为Tls12,这解决了我的个人电脑上的问题。
然而,当我试图在我的第二台电脑上使用它时。这一行抛出异常:
System.NotSupported: The requested security protocol is not supported我认为这意味着它在PC上没有tls12支持。
我在那台PC上安装了.NET Framework4.5.1,我无法安装.NET Framework4.7,因为它在安装中失败了。
我假设安全协议附带4.7,但我在MSDN上看不到这一点。
我怎样才能在第二台电脑上下载网页呢?
有办法让我手动安装Tls12协议吗?
是否有其他选择使用HttpWebRequest或一些独立的可执行文件?
发布于 2019-05-01 22:15:40
最后我使用了cURL二进制文件,因为它不依赖于.NET框架。
发布于 2019-04-30 13:18:28
我强烈建议更新到最新的.Net框架"4.7.X“。
从.NET Framework4.7开始,此属性的默认值是SecurityProtocolType.SystemDefault。这允许基于.NET (如FTP、HTTP和SMTP)的SslStream框架网络API从操作系统或系统管理员执行的任何自定义配置继承默认安全协议。
因此,从理论上讲,更新到最新的.Net框架应该修复这个问题,而不需要更改任何系统注册表值,例如,支持更低的TLS版本或覆盖框架默认行为。
另外,它只在您的机器上工作的原因可能是,您的机器支持TLS 1.2,而其他机器则不支持TLS 1.2。
要检查是否可以检查启用版本的注册表,请执行以下操作:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols如果您需要启用TLS1.2(在默认情况下,如果它是常规更新的,则应该启用它),您可以检查以下文章:
https://www.itnota.com/enabling-tls-1-2-default-security-protocol-windows-servers/
总结一下:
。
https://stackoverflow.com/questions/55880293
复制相似问题