Python query_cache все еще запрашивает удаленный URL - PullRequest
1 голос
/ 26 апреля 2020

Я использую библиотеку запросов_cache для Python. Похоже, установить кэш просто отлично; запрос URL-адреса создает файл кэша .sqlite, и последующие запросы извлекают эти данные, даже если удаленная страница изменяется.

Мое соединение inte rnet сегодня довольно плохое, и я заметил, что мой сценарий (который делает много (предположительно кэшированные) запросы) работала медленно. В качестве быстрой проверки работоспособности, просто чтобы убедиться, что все работает как положено, я попробовал тестовый скрипт для создания кэша, а затем снова запустил его после отключения компьютера от Wi-Fi. Тем не менее, это ошибки:

requests.exceptions.ConnectionError: HTTPConnectionPool(host='magicplugin.normalitycomics.com', port=80): Max retries exceeded with url: /update/updatelist.txt (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x110390d68>: Failed to establish a new connection: [Errno 8] nodename nor servname provided, or not known'))

Почему запрос даже пытается подключиться к удаленному сайту, если запрос_cache перенаправляет его на использование локальных кэшированных данных? Есть ли способ избежать этого? Мне не нужно замедлять работу скрипта (особенно если у меня плохое соединение) и делать ненужные запросы с чужого удаленного сервера.

1 Ответ

0 голосов
/ 26 апреля 2020

Я понял это!

Мой реальный код делает запросы, которые иногда успешно получают страницы, а иногда получают 404.

Единственная причина, по которой мой простой тестовый скрипт повторил проблему, заключалась в том, что я сделал опечатку на странице, которую я просил. Запросы получили 404. Даже несмотря на то, что request_cache создал файл кеша, он не сохранил в нем этот результат.

Оказывается, чтоquesx_cache обычно кеширует только ответы с 200 кодами, но это настраивается:

requests_cache.install_cache('example_cache', allowable_codes=(200, 404))

А теперь все отлично работает!

...