我正在尝试从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,这确实可以解决PC上的问题。
但是,当我尝试在第二台PC上使用它时。该行引发异常:
System.NotSupported: The requested security protocol is not supported
我认为这意味着该PC上没有tls12支持。
我在该PC上安装了.NET Framework 4.5.1,但由于安装失败而无法安装.NET Framework 4.7。
我认为该安全协议是4.7附带的,但是我没有在MSDN上确认这一点。
如何在第二台PC上下载网页?
我可以手动安装Tls12协议吗?
是否有使用HttpWebRequest或其他独立可执行文件的替代方法?
答案 0 :(得分:0)
我强烈建议更新到最新的.Net Framework“ 4.7.X”。
从.NET Framework 4.7开始,此默认值 属性是SecurityProtocolType.SystemDefault。这允许.NET 基于SslStream的框架网络API(例如FTP,HTTP和 SMTP)从操作中继承默认安全协议 系统或系统执行的任何自定义配置 管理员。
因此,从理论上讲,更新到最新的.Net Framework应该可以解决该问题,而无需更改任何系统注册表值,例如,支持较低的TLS版本或覆盖Framework的默认行为。
也可能它只能在您的计算机上运行的原因可能是,您的计算机支持TLS 1.2,而另一台计算机则不支持。
要检查是否可以检查启用了“版本”的注册表,请执行以下操作:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols
如果需要启用TLS 1.2(如果定期更新,则默认情况下应启用此功能),请查看以下文章:
https://www.itnota.com/enabling-tls-1-2-default-security-protocol-windows-servers/
总结一下:
如果不可能 然后使用
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
如果它不能在另一台计算机上运行,请检查支持的TLS 此计算机上的版本
。
答案 1 :(得分:0)
我最终使用了cURL二进制文件,因为它不依赖于.NET Framework。