卷曲最大时间和连接超时根本不起作用

卷曲最大时间和连接超时根本不起作用

我正在运行curl 7.68.0 (x86_64-pc-linux-gnu) libcurl/7.68.0并且我正在尝试设置--最大时间或者 --连接超时,不幸的是这些值似乎没有任何作用。

概念验证1:

time curl -v -k -I --max-time 5 https://myawesomehost/file.test
* Resolving timed out after 5001 milliseconds
* Closing connection 0
curl: (28) Resolving timed out after 5001 milliseconds

real    0m10.031s
user    0m0.011s
sys 0m0.012s

这应该在 5 秒后终止该命令,但花了 10.031 秒

PoC 2:

time curl -v -k -I --connect-timeout 3.0 https://myawesomehost/file.test
* Resolving timed out after 3000 milliseconds
* Closing connection 0
curl: (28) Resolving timed out after 3000 milliseconds

real    0m10.068s
user    0m0.005s
sys 0m0.010s

同样,花费了 10.068 秒。

我发现我可以使用暂停命令行工具,但我想知道curl 有什么问题。

答案1

在没有看到你的情况curl --version下,让我在遇到这个确切问题的基础上在黑暗中进行尝试。你的curl版本是在没有c-ares的情况下构建的吗?第一行curl --version应该告诉你:

curl 7.71.0-DEV (x86_64-unknown-linux-gnu) libcurl/7.71.0-DEV c-ares/1.10.0

我最近遇到了同样的问题,DNS 超时导致curl 超过指定的超时。打开详细信息后,它会在 5 秒时显示 DNS 查找 DID 超时,但随后会等到 20 秒才完全超时并关闭。我们 root 导致它的版本没有c-战神(异步 DNS 解析器库)。

我从他们的源代码中构建了它github使用这些指示但添加./configure --enable-ares

c-ares/1.10.0在这里你可以在版本信息中看到它是用 c-ares 构建的

$ /usr/local/bin/curl --version
curl 7.71.0-DEV (x86_64-unknown-linux-gnu) libcurl/7.71.0-DEV c-ares/1.10.0
Release-Date: [unreleased]
Protocols: dict file ftp gopher http imap pop3 rtsp smtp telnet tftp
Features: AsynchDNS IPv6 Largefile UnixSockets

它的行为符合预期

$ time /usr/local/bin/curl --max-time 5 google.com -v
* Resolving timed out after 5000 milliseconds
* Closing connection 0
curl: (28) Resolving timed out after 5000 milliseconds

real    0m5.002s
user    0m0.000s
sys     0m0.002s

并在没有 c-ares 的情况下构建

/usr/local/bin/curl --version
curl 7.71.0-DEV (x86_64-unknown-linux-gnu) libcurl/7.71.0-DEV
Release-Date: [unreleased]
Protocols: dict file ftp gopher http imap pop3 rtsp smtp telnet tftp 
Features: AsynchDNS IPv6 Largefile UnixSockets

超时不起作用:

time /usr/local/bin/curl --max-time 5 google.com -v
* Resolving timed out after 5000 milliseconds
* Closing connection 0
curl: (28) Resolving timed out after 5000 milliseconds

real    0m20.023s
user    0m0.003s
sys     0m0.000s

如果您从源代码构建curl,或者它是您的一个选项,您可能只需要启用该选项。

编辑:JamesTheAwesomeDude 提出了一个很好的观点,即追查这个 cURL 的来源值得弄清楚。就我而言,它是一个运行 Amazon Linux 2 的新 EC2 实例。

$ cat /etc/*-release | grep PRETTY_NAME
PRETTY_NAME="Amazon Linux 2"

相关内容