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;      

оба возвращает то же самое.

30
задан user270181
04.04.2023 10:10 Количество просмотров материала 2609
Распечатать страницу

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. The @ предотвратит вывод сообщений об ошибках.

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

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

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

  • попробуйте загрузить файл.
  • если это не удастся, вы сможете определить это на основе кода возврата/выхода wget. Так что в этом случае подождите 5 минут, затем повторите.
0
отвечен Mario 2023-04-05 17:58

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх