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