【问题标题】:Make wget retry original URL after 3XX Redirect使 wget 在 3XX 重定向后重试原始 URL
【发布时间】: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:禁止。

【问题讨论】:

    标签: http amazon-s3 wget


    【解决方案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;完成

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-11
        • 2011-01-18
        • 1970-01-01
        • 2017-06-01
        • 1970-01-01
        • 2021-04-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多