如何区分 curl 最大时间和连接超时?

Posted

技术标签:

【中文标题】如何区分 curl 最大时间和连接超时?【英文标题】:How to tell a curl max-time apart from a connect-timeout? 【发布时间】:2015-08-12 09:44:36 【问题描述】:

示例命令

curl -s -w "%http_code %http_connect" --connect-timeout 10 --max-time 50

将返回000 000 用于达到连接超时和达到最大时间。区分这两个错误的最佳方法是什么?

据我所知,唯一的区别是 -s 标志被删除的时间:

连接超时返回curl: (28) connect() timed out 和 最大超时返回curl: (28) Operation timed out

【问题讨论】:

%time_total 和/或%time_connect 帮忙? 在 n 秒内没有响应的连接上(触发--connect-timeout)我注意到curl 的详细输出中缺少 HTTP 状态代码。相反,通过--max-time 阈值的已建立连接将包含此信息。您能否对详细输出进行一些检查? @Lewis Norton:如果--connect-timeout 被触发,则没有 HTTP 状态,因为一开始就没有连接。但是,如果--max-time 不一定意味着您将拥有一个状态,因为连接可以在建立后切断,但在收到第一个 HTTP 响应之前。 @lcd047 实际上非常正确。我没想到。 你有没有找到更好的方法来区分这两种故障? 【参考方案1】:

你的问题有两点:

HTTP 代码 区分差异

HTTP 代码

下单失败时不会有http码。因为没有响应。只有下单成功时才能获取http码。

区分差异

您可以按照以下顺序获取错误。

result=`curl  --connect-timeout $connectiontimeout --max-time $maxtimeout -s -S -X POST -H 'Content-Type: text/plain' -d "$DATA" "$resturl" 1>&1 2>&1`

if [ "$result" = "curl: (28) connect() timed out" ] ;then
    echo "curl: (28) connect() timed out"

fi

然后就可以通过判断结果来区分这两个错误了。

【讨论】:

以上是关于如何区分 curl 最大时间和连接超时?的主要内容,如果未能解决你的问题,请参考以下文章

如何修复连接超时,cURL 错误 28?

有没有办法区分连接超时和套接字超时?

如何设置数据库的连接数和连接超时时间

MySQL连接超时自动断开连接应该怎样处理

在多次运行说“无法建立连接”或“连接()超时”后,CURL 失败

cURL 错误 28 - x 毫秒后连接超时