首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#网络异常意外EOF

C#网络异常意外EOF
EN

Stack Overflow用户
提问于 2019-04-27 11:54:08
回答 2查看 692关注 0票数 0

我正试图从imdb下载一个json网页,以找到一个演员。

代码语言:javascript
复制
        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();
        }

无论何时我尝试下载。

例外是:

代码语言:javascript
复制
The underlying connection was closed: An unexpected error occurred on a send.

内部网络例外是:

代码语言:javascript
复制
Received an unexpected EOF or 0 bytes from the transport stream.

据我所知。这是因为imdb的一个服务器配置错误。

为了解决这个问题,我用

代码语言:javascript
复制
System.Net.ServicePointManager.SecurityProtocol = (System.Net.SecurityProtocolType)(3072);

将安全协议设置为Tls12,这解决了我的个人电脑上的问题。

然而,当我试图在我的第二台电脑上使用它时。这一行抛出异常:

代码语言:javascript
复制
System.NotSupported: The requested security protocol is not supported

我认为这意味着它在PC上没有tls12支持。

我在那台PC上安装了.NET Framework4.5.1,我无法安装.NET Framework4.7,因为它在安装中失败了。

我假设安全协议附带4.7,但我在MSDN上看不到这一点。

我怎样才能在第二台电脑上下载网页呢?

有办法让我手动安装Tls12协议吗?

是否有其他选择使用HttpWebRequest或一些独立的可执行文件?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-01 22:15:40

最后我使用了cURL二进制文件,因为它不依赖于.NET框架。

票数 0
EN

Stack Overflow用户

发布于 2019-04-30 13:18:28

我强烈建议更新到最新的.Net框架"4.7.X“。

根据Microsoft文档

从.NET Framework4.7开始,此属性的默认值是SecurityProtocolType.SystemDefault。这允许基于.NET (如FTP、HTTP和SMTP)的SslStream框架网络API从操作系统或系统管理员执行的任何自定义配置继承默认安全协议。

因此,从理论上讲,更新到最新的.Net框架应该修复这个问题,而不需要更改任何系统注册表值,例如,支持更低的TLS版本或覆盖框架默认行为。

另外,它只在您的机器上工作的原因可能是,您的机器支持TLS 1.2,而其他机器则不支持TLS 1.2。

要检查是否可以检查启用版本的注册表,请执行以下操作:

代码语言:javascript
复制
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols

如果您需要启用TLS1.2(在默认情况下,如果它是常规更新的,则应该启用它),您可以检查以下文章:

https://support.microsoft.com/en-us/help/3140245/update-to-enable-tls-1-1-and-tls-1-2-as-default-secure-protocols-in-wi

https://www.itnota.com/enabling-tls-1-2-default-security-protocol-windows-servers/

总结一下:

  • 尝试更新到最新的.Net框架。
  • 如果这是不可能的,那就用 System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
  • 如果它不能在另一台机器上工作,那么检查此机器上受支持的TLS版本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55880293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档