C# 中的 httpClient 调用超时,而 cUrl 正在工作

Posted

技术标签:

【中文标题】C# 中的 httpClient 调用超时,而 cUrl 正在工作【英文标题】:httpClient call in C# goes to timeout, while cUrl is working 【发布时间】:2021-04-23 07:56:29 【问题描述】:

我对 httpClient 有一个奇怪的问题。 我正在尝试向远程 API 发出 GET 请求。 cUrl 在终端上运行良好,但具有相同请求的 httpClient 只会超时。 我使用https://curl.olsh.me/ 工具创建了 httpClient 并将等待时间设置为 2 分钟。 请求被触发后,它等待,但没有得到响应代码,并进入异常

2021-04-23 03:40:22.686 +01:00 [INF] httpRequest 
2021-04-23 03:42:02.798 +01:00 [ERR] Exception Message : The operation has timed out. 

请您猜猜可能是什么问题。提前谢谢你

【问题讨论】:

你能告诉我们你的代码吗? 可能是和***.com/questions/66072583/…类似的问题 这样的失败通常是由于三个不同的问题 1) 如果 30 秒后发生错误,则意味着代理超时。正在使用代理,但代理从未响应 2) 请求中的 HTTP 标头错误或丢失。 c# 中的默认标头与其他语言不同。 3) 您正在使用 HTTPS(安全)并且使用的 TLS 身份验证失败。 Cookie 可能不是问题。首次建立连接时会建立 cookie。然后在后续连接中使用 cookie 以减少连接时间。饼干只会有帮助。不会导致失败。 【参考方案1】:

感谢所有评论的人,尤其是@jdweng。它让我知道在哪里寻找问题。 因此,超时问题是由 TLS 身份验证引起的。根证书未在服务器上导入。导入根证书后,问题解决了。

糟糕的是,无法从异常文本中找出确切的问题。

【讨论】:

那么你的问题并不包含解决这个特定问题所需的所有信息。 我发布了我当时掌握的所有信息

以上是关于C# 中的 httpClient 调用超时,而 cUrl 正在工作的主要内容,如果未能解决你的问题,请参考以下文章

为什么C#HttpClient不能调用此URL(总是超时)?

C# Httpclient Asp.net Core 2.0 on Kestrel Waiting, Lock Contention, high CPU

在 C# 中使用 Post 方法 HttpClient 时请求超时

连接到 *** 时 HttpClient.GetAsync 超时

第二次调用 C# HttpClient 错误请求

使用 C# HttpClient API 和 postman 测试的区别?客户端调用适用于邮递员,但不适用于 C# httpClient getAsync