使用 HtmlAgilityPack 进行 Web 查询抛出 System.Net.WebException:请求被中止:无法创建 SSL/TLS 安全通道 [重复]

Posted

技术标签:

【中文标题】使用 HtmlAgilityPack 进行 Web 查询抛出 System.Net.WebException:请求被中止:无法创建 SSL/TLS 安全通道 [重复]【英文标题】:web query with HtmlAgilityPack throws System.Net.WebException: The request was aborted: Could not create SSL/TLS secure channel [duplicate] 【发布时间】:2019-01-11 02:19:06 【问题描述】:

从我读到的几个主题中,绝大多数与贝宝有关,还有一些与称为 ServicePointManager 的东西有关。这与其他问题无关!在这种情况下,我只是在尝试一个与 paypal 或 ServicePointManger 无关的基本 html 敏捷包示例:

        var url = "some_url";
        var web = new HtmlWeb();
      var doc = web.Load(url); 

并且标记的行抛出此错误:

Unhandled Exception: System.Net.WebException: The request was aborted: Could not create SSL/TLS secure channel.
   at System.Net.HttpWebRequest.GetResponse()
   at HtmlAgilityPack.HtmlWeb.Get(Uri uri, String method, String path, HtmlDocument doc, IWebProxy proxy, ICredentials creds) in C:\something\HtmlAgilityPack\HtmlAgilityPack.Shared\HtmlWeb.cs:line 1677
   at HtmlAgilityPack.HtmlWeb.LoadUrl(Uri uri, String method, WebProxy proxy, NetworkCredential creds) in C:\Users\Jonathan\source\repos\HtmlAgilityPack\HtmlAgilityPack.Shared\HtmlWeb.cs:line 2086
   at HtmlAgilityPack.HtmlWeb.Load(Uri uri, String method) in C:\something\HtmlAgilityPack\HtmlAgilityPack.Shared\HtmlWeb.cs:line 1300
   at HtmlAgilityPack.HtmlWeb.Load(String url) in C:\something\HtmlAgilityPack\HtmlAgilityPack.Shared\HtmlWeb.cs:line 1197
   at DownloadSeco.Program.Main(String[] args) in C:\something\Program.cs:line 16

究竟是什么导致了这个错误以及如何解决它?

编辑:我要结束这个话题,显然问题出在我的特定计算机上,因为它可以在我旁边的电脑上运行。

【问题讨论】:

您要在哪个 url 上发送请求? 我已经编辑了帖子以包含它。 这有很多可能的原因,但最可能的罪魁祸首是服务器拒绝了不安全的HTTPS算法。强制 TLS 1.2,请参阅副本。否则,跟踪它,查看第二个副本。 【参考方案1】:

据我了解,Paypal 已更新 TLS 版本。详情here。

但.NET默认不支持TLS1.2。

您需要手动启用它。

你可以使用下一个代码来做到这一点:

System.Net.ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12;

SecurityProtocol 是 Singleton。您可以在您的应用程序中设置一次 TLS(不是为每个 WebRequest 设置一次)。您可以在 Program.cs 文件中设置 TLS。

另外,请查看此 SO topic 了解详情。

【讨论】:

老兄,你有没有费心阅读这篇文章。我特别指出我的问题与您提到的两件事无关,即贝宝和服务点经理。 @cybera 您的 SSL 连接有问题。您的应用程序不支持必要的 SSL 协议。您需要手动添加SecurityProtocolType,您的代码才能正常工作。 感谢它的工作。问题是如果我不做任何相关的事情,这怎么可能在我的电脑上被改变。该代码可以在下一台电脑上运行,无需额外的代码行。 @cybera 不幸的是,.NET 默认不使用 TLS1.2。您需要手动添加协议。你别无他法…… 这毫无意义。我在我旁边的另一台 PC 上随意复制粘贴了我尝试运行的给出错误的代码。并且代码运行流畅,在我的 PC 上我需要添加这行代码,否则它不起作用。如果默认情况下没有添加它,其他电脑上也应该需要它,但它不是。【参考方案2】:

它对我有用,使用 http 和 https

【讨论】:

我重新启动并再次尝试。我犯了同样的错误。我得到它而你没有得到它的原因可能是什么?我也尝试了http和https,结果对我来说是一样的。 可能是那台电脑的连接问题?您是否尝试加载其他页面内容?

以上是关于使用 HtmlAgilityPack 进行 Web 查询抛出 System.Net.WebException:请求被中止:无法创建 SSL/TLS 安全通道 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

经验总结21--抓取WEB数据,汇率,HtmlAgilityPack

C#+HtmlAgilityPack+Dappe

我最优惠网系列——HTML 解析类库HtmlAgilityPack

HtmlAgilityPack,使用 XPath 包含方法和谓词

简单爬虫

使用 HtmlAgilityPack 删除属性