Я использую 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 ответ1

0

Как насчет использования простого сценария для этого:

  • Запускайте скрипт каждые 5 минут, если он уже не запущен.
  • Проверьте возраст локального файла. Если он старше определенного порогового значения, загрузите его снова.

Так что, если все идет гладко, ничего не происходит, если файл не устарел. Если файл устарел и его загрузка не удалась, вы можете повторить следующую итерацию.

Я не уверен, почему вы пометили это php , но если вы на самом деле запускаете php-скрипт, такой подход довольно прост (если у вас включены веб-сокеты):

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

Обратите внимание, что $remote_path действительно может быть URL-адресом HTTP или FTP. Нет необходимости вызывать wget. Символ @ предотвратит вывод сообщений об ошибках.

Чтобы доказать, что это не вызовет ненужного ожидания:

  • Предположим, у вас есть 1000 файлов для загрузки, но вы можете загружать до 250 файлов в час.
  • Установите для cache_duration время сохранения, при котором вы получите все файлы, например 24 часа (24 * 60 * 60).
  • Повторяйте сценарий выше один раз в час.
  • Первая итерация первых 250 файлов будет обновлена. Другие потерпят неудачу.
  • Во второй итерации первые 250 файлов будут пропущены (поскольку они достаточно свежие), а следующие 250 файлов будут загружены.
  • После четвертой итерации все 1000 файлов будут обновлены / загружены.
  • Конечно, вы можете установить более короткий интервал, например, 5 минут, но это создаст намного больше запросов / трафика (зависит от того, является ли это приемлемым).

Альтернативная идея сценария:

  • Попробуйте скачать файл.
  • Если это не удастся, вы сможете определить это на основе значения возврата / кода выхода wget. Так что в этом случае подождите 5 минут, затем повторите.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .