Wget 收到响应 403

Wget 收到响应 403

我使用的 API 对一小时内的请求数有一定的限制。但我的脚本一次完成所有请求,因此我丢失了大约 1/3 的请求,因为我得到了 403。

有没有什么方法可以检查 wget 的响应,如果我得到 403 则等待 5 分钟并重试?

以下是我的(目前)测试代码:

system ("wget \"http://test-link.com/403/\" -O  {$dir}/{$in_dir_counter}.xml");
$test = system ("wget \"http://test-link.com/403/\" -O  {$dir}/{$in_dir_counter}.xml");

echo "responsed - ".$test;      

两者返回相同。

答案1

如何使用一个简单的脚本来实现这一点:

  • 每 5 分钟运行一次脚本,除非它已经在运行。
  • 检查本地文件的使用期限。如果超过特定阈值,则重新下载。

因此,如果一切顺利,则不会发生任何事情,除非文件已过期。如果文件已过期且下载失败,您可以重试下一次迭代。

我不确定你为什么用 标记它php,但如果你实际上正在运行一个 php 脚本,这种方法相当容易做到(假设你已经启用了 web 套接字):

foreach($files as $file)
    if (@filemdate($local_path + $file) + $cache_duration < time())
        @copy($remote_path + $file, local_path + $file);

请注意,$remote_path确实可以是 HTTP 或 FTP URL。无需调用 wget。这@将阻止打印错误消息。

为了证明这不会导致不必要的等待:

  • 假设您有 1000 个文件需要下载,但每小时最多只能下载 250 个文件。
  • 设置cache_duration为您将获取所有文件的保存时间,例如 24 小时(24 * 60 * 60)。
  • 每小时重新运行上述脚本一次。
  • 第一次迭代将更新前 250 个文件。其余文件将失败。
  • 第二次迭代将跳过前 250 个文件(因为足够新)并下载接下来的 250 个文件。
  • 第四次迭代后,您将更新/下载所有 1000 个文件。
  • 当然,您可以设置更短的间隔,例如 5 分钟,但这会产生更多的请求/流量(取决于是否可以接受)。

备选脚本思路:

  • 尝试下载一个文件。
  • 如果失败,您应该能够根据 wget 的返回值/退出代码确定。因此在这种情况下等待 5 分钟,然后重复。

相关内容