我在 Windows 上使用 curl 下载大型文件。但是,网络连接有时会重置,所以我想重新开始下载,但不确定应该使用什么参数。
我努力了
curl.exe --connect-timeout 240 --keepalive-time 240 --verbose --retry 50 --retry-max-time 0 --compressed -o "c:\largefile.bin" -C -https://example.org/largefile.bin
但--retry
不起作用。
当连接由于某种原因重置时,将--verbose
显示以下内容:
* ...
* Closing connection 0
* schannel: shutting down SSL/TLS connection with example.org port 443
* Send failure: Connection was reset
* schannel: failed to send close msg: Failed sending data to the peer (bytes written: -1)
curl: (56) Send failure: Connection was reset
我如何让 curl 重试curl: (56) Send failure: Connection was reset
?
答案1
curl
默认情况下,不会对所有错误进行重试,即使使用--retry
。
因此,要么使用--retry-all-errors
(自 curl 7.71.0 起),要么使用wget -c
,这样就无需额外的选项即可工作。
答案2
由于--retry-all-errors
我们的版本不支持curl
基于 Linux 的容器(错误消息curl: option --retry-all-errors: is unknown
:),我们最终使用了一个while
循环:
while ! curl -s -f -o largefile.bin https://example.org/largefile.bin
do echo "will retry in 2 seconds"; sleep 2; done