使 wget 在 3XX 重定向后重试原始 URL
Posted
技术标签:
【中文标题】使 wget 在 3XX 重定向后重试原始 URL【英文标题】:Make wget retry original URL after 3XX Redirect 【发布时间】:2016-11-11 10:42:11 【问题描述】:我有一项服务可以将用户重定向到临时预签名 AWS 下载。这些是大文件,通常为 5-10GB。为了防止下载共享,我们有一个相对较短(30 秒)的有效生命周期。
一切正常,除了在互联网连接速度较慢时,它们往往会失败或被中断。 wget 具有自动重试下载的功能。但是,wget 不会重试原始 URL(例如:http://service.com/download/file.zip),而是重试重定向的预签名 URL(例如:http://service.s3.amazonaws.com/file.zip?AWSAccessKeyId=XXXX&Signature=XXXX&Expires=1468000000)
由于这些文件很大,而且预签名的生命周期很短,因此临时 url 不再有效,用户会收到 403 Forbidden 结果。
最初,当我们注意到这个问题时,我们使用的是 302 Found 临时重定向。一项小研究似乎表明我们应该一直使用 307 临时重定向。但是,这并没有解决 wget 的问题。我们尝试了 303 See Other,但也不管用。
有谁知道如何让 wget 重试原始 URL 而不是重定向的 URL?
以下是 wget 示例日志:
--2016-07-06 10:29:51-- https://service.com/download/file.zip
正在连接到 service.com (service.com)|10.0.0.1|:443... 已连接。
HTTP 请求已发送,等待响应... 302 Found
地点: 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) [应用程序/zip]
保存到:'file.zip'
file.zip 53%[=========> ] 1.03G --.-KB/s in 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:禁止。
【问题讨论】:
【参考方案1】:我有一个类似的问题,和@panzerito 类似的答案,但把它分解成一个我称为 loopdone 的脚本
#!/bin/bash
until `$1`; do sleep 1; echo restarting; done
然后我可以做loopdone "wget -c http://my.url/"
(包括引号)来强制它一次又一次地运行(并恢复,除非服务器不支持它)直到退出代码为0。(意味着没有错误)
【讨论】:
【参考方案2】:Bash 代码: 初始错误退出状态;直到 [ "$?" -eq“0”];做 wget https://example.com/download/file.zip -c;完成
【讨论】:
以上是关于使 wget 在 3XX 重定向后重试原始 URL的主要内容,如果未能解决你的问题,请参考以下文章
React Router - PrivateRoute,登录后重定向到原始目的地
私人 Joomla 2.5 K2 项目在登录后重定向回主页而不是原始链接