Curl 最大時間と接続タイムアウトはまったく機能しません。

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秒かかりました。

使えることがわかりました停止するコマンドラインツールですが、カールに何が問題なのか疑問に思います。

ベストアンサー1

あなたを見ずにcurl --version、この正確な問題に基づいて暗闇の中でこれを試してみましょう。あなたのカールバージョンは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 タイムアウトが原因でカールが指定されたタイムアウトを超えるという同じ問題が発生しました。詳細を開いた後、DNSルックアップDIDタイムアウトは5秒で表示されますが、完全にタイムアウトして閉じる前に20秒まで待ちます。私たちのルートのため、そのバージョンではc - 戦争の神(非同期DNSリゾルバライブラリ)。

私は彼らのソースコードでそれを作りました。フラッグハブこれを使う指示するしかし、追加./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

ソースからカールを構築する場合、またはオプションの場合にのみ、このオプションを有効にする必要があります。

編集者:JamesTheAwesomeDudeは、このcURLのソースを追跡することが理解する価値があることを指摘しました。私の場合は、Amazon Linux 2を実行している新しいEC2インスタンスでした。

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

おすすめ記事