我正在使用WebClient
从Web资源获取数据:
var wc = new System.Net.WebClient();
var stream = wc.OpenRead("http://...");
// etc..
它曾经工作到最近,当服务器强行关闭连接时。
基于this StackOverflow answer,我添加了ServicePointManager
设置:
var wc = new System.Net.WebClient();
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
var stream = wc.OpenRead("http://...");
// etc..
......它再次像以前一样工作。
我得知TLS与HTTPS有关,并且设置的效果是在握手中包含TLS1.2,并且主机站点最近必须已经更新以拒绝旧的易受攻击的协议,但为什么它是普通的,非必需的 - 安全的HTTP?
默认情况下,在WebClient实例中,AllowAutoRedirect设置为true。因此,请求会自动遵循服务器的重定向响应。
只需将AllowAutoRedirect设置为false,您就不会遵循任何重定向,因此您不必处理SSL / TLS握手。
当然,如果您的服务器不想使用HTTP提供请求,您将无法获得所需的内容。无论如何,将AllowAutoRedirect设置为false将帮助您确认您遇到的行为是由于重定向。