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-скрипт, такой подход довольно прост (если у вас включены веб-сокеты):

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 минут, затем повторите.
Другие вопросы по тегам