我有一项服务可将用户重定向到临时预先签名的AWS下载。这些是大文件,通常为5-10gb。为防止下载共享,我们的有效寿命相对较短(30秒)。
一切正常,但在慢速互联网连接上,它们往往会失败或被打断。 wget具有自动重试下载的功能。但是,wget不是重试原始网址(例如:http://service.com/download/file.zip),而是重试重定向的预签名网址(例如:http://service.s3.amazonaws.com/file.zip?AWSAccessKeyId=XXXX&Signature=XXXX&Expires=1468000000)
由于这些是大文件,并且预签名生命周期太短,因此该临时URL不再有效,并且用户获得403 Forbidden结果。
最初,当我们发现问题时,我们使用 302 Found 临时重定向。一项小小的研究似乎表明我们应该使用 307 Temporary Redirect 。但是,这并没有解决wget的问题。对于笑嘻嘻和笑声,我们尝试了 303 See Other ,但这也不起作用。
有没有人知道如何让wget重试原始网址而不是重定向的网址?
下面是一个wget示例日志:
- 2016-07-06 10:29:51-- https://service.com/download/file.zip
连接到service.com(service.com)| 10.0.0.1 |:443 ...已连接。
发送HTTP请求,等待响应... 302发现
位置: https://service.s3.amazonaws.com/file.zip?AWSAccessKeyId=XXXX&Signature=XXXX&Expires=1468000000 [以下]
- 2016-07-06 10:29:52-- https://service.s3.amazonaws.com/file.zip?AWSAccessKeyId=XXXX&Signature=XXXX&Expires=1468000000
解决service.s3.amazonaws.com(service.s3.amazonaws.com)... 54.231.12.129
连接到service.s3.amazonaws.com (service.s3.amazonaws.com)| 54.231.12.129 |:443 ...已连接。
发送HTTP请求,等待响应... 200 OK
长度:2070666907(1.9G)[application / zip]
保存到:'file.zip'
file.zip 53%[=========> ] 1.03G - .- KB / s,18m 7s
2016-07-06 10:47:59(995 KB / s) - 读取字节错误 1107205784/2070666907(指定的会话已失效 某些原因。)。重试。
- 2016-07-06 10:48:00--(尝试:2)https://service.s3.amazonaws.com/file.zip?AWSAccessKeyId=XXXX&Signature=XXXX&Expires=1468000000
连接到service.s3.amazonaws.com (service.s3.amazonaws.com)| 54.231.12.129 |:443 ...已连接。
发送HTTP请求,等待响应... 403 Forbidden
2016-07-06 10:48:01错误403:禁止。
答案 0 :(得分:0)
我有一个类似的问题,和@panzerito类似的答案,但把它分成了一个名为loopdone的脚本
C#
然后我可以做#!/bin/bash
until `$1`; do sleep 1; echo restarting; done
(包括引号)强制它一次又一次地运行(并恢复,除非服务器不支持它),直到退出代码为0.(表示没有错误)
答案 1 :(得分:-1)
击代码: initial_error_EXIT_STATUS;直到[“$?” -eq“0”];做wget https://example.com/download/file.zip -c;完成