使用RestSharp.RestRequest调用API失败:连接被主机软件中止
RestSharp调用API遇SocketException(10053)连接中止问题排查方案
以下是针对你遇到的连接被主机软件中止问题的具体排查和解决方向:
1. 强制指定TLS版本
.NET应用默认的TLS版本可能与API服务器要求不匹配,导致SSL握手失败后连接被中止。
// 在请求初始化前设置 ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls13; // 或者通过HttpClientHandler配置RestClient var handler = new HttpClientHandler { SslProtocols = SslProtocols.Tls12 | SslProtocols.Tls13 }; var client = new RestClient(handler);
2. 延长请求超时时间
若服务器响应较慢,本地超时机制会主动中止连接,即使数据包已到达服务器。
var request = new RestRequest("your-api-endpoint", Method.Post); request.Timeout = 15000; // 设置为15秒,根据实际情况调整
3. 检查本地代理与防火墙拦截
即使Postman/Python能正常调用,应用进程可能因权限问题被本地防火墙、杀毒软件或代理拦截:
- 确认应用程序被允许出站连接(在Windows防火墙中添加规则)
- 临时关闭杀毒软件/防火墙测试
- 若使用代理,给RestSharp配置对应代理:
var client = new RestClient("https://api-server-url") { Proxy = new WebProxy("http://proxy-address:port", true) };
4. 强制使用HTTP/1.1
部分服务器对HTTP/2支持存在兼容性问题,而Postman/Python默认使用HTTP/1.1:
var handler = new HttpClientHandler { DefaultRequestVersion = HttpVersion.Version11, MaxRequestVersion = HttpVersion.Version11 }; var client = new RestClient(handler);
5. 对齐请求头参数
对比Postman的请求头,确保RestSharp的请求头完全一致(如User-Agent、Content-Type、授权头等):
request.AddHeader("User-Agent", "PostmanRuntime/7.32.3"); request.AddHeader("Content-Type", "application/json"); // 添加其他Postman中存在的必要请求头
6. 临时跳过证书验证(测试环境)
若服务器使用自签名证书,.NET默认的证书验证会失败导致连接中断:
var handler = new HttpClientHandler { ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => true }; var client = new RestClient(handler);
注意:该方法仅用于测试环境,生产环境必须确保证书合法性。
内容的提问来源于stack exchange,提问作者HUAI-DE HU
相关产品推荐
相关产品推荐

