我有一个发送HTTP请求作为自动化测试的一部分的问题,我想检查URL的状态代码。当我发送请求时,我有一个Exception:
系统。AggregateException: '发生一个或多个错误。'(SSL连接无法建立,参见内部异常。)'
内部异常有:
HttpRequestException: The SSL connection could not be established, see inner exception.
IOException: Unable to read data from the transport connection: An existing connection was forced close by remote host.
SocketException: An existing connection was forced close by remote host.
我代码:
public HttpStatusCode SendRequest(string _url)
{
SetUrl(_url);
HttpClientHandler clientHandler = new HttpClientHandler();
clientHandler.ServerCertificateCustomValidationCallback += (sender, cert, chain, sslPolicyErrors) => { return true; };
clientHandler.SslProtocols = SslProtocols.Tls;
HttpClient client = new HttpClient(clientHandler);
var response = client.GetAsync(Url).Result;
StatusCode = response.StatusCode;
return StatusCode;
}
提前感谢您!
正如@CodeCaster已经提到的:SslProtocols.Tls
(TLS 1.0)现在不是一个选择。只需使用SslProtocols.None
(这是默认的)让操作系统为您选择最佳选项:
None:允许操作系统选择使用最佳协议,并阻止不安全的协议。除非你的应用有特别的理由不这样做,否则你应该使用这个字段。
https://learn.microsoft.com/en us/dotnet/api/system.security.authentication.sslprotocols?view=net - 5.0 #字段
此外,跳过服务器证书验证(通过让ServerCertificateCustomValidationCallback
只是返回true)是一个非常危险的事情。你应该避免那样。
远程主机是否在您的控制之下?你能检查一下它使用的是哪个TLS版本吗?
远程主机不接受您想要使用TLS 1.0进行连接,这是不赞成的。
指定。tls12或。tls13。