Вопрос

Они не упомянули об этом в документации Python. И недавно я проверяю веб-сайт, просто освежающий сайт, используя URLLIB2.URLOPEN (), чтобы извлечь определенный контент, я иногда замечаю, когда я обновляю сайт Urllib2.urlopen (), кажется, не получает вновь дополнительное содержимое. Так что мне интересно, это где-то делается кеш, верно?

Это было полезно?

Решение

Так что мне интересно, это где-то делается кеш, верно?

Это не так.

Если вы не видите новые данные, это может иметь много причин. Наиболее большие веб-сервисы используют кэширование на стороне сервера для причин производительности, например, с использованием кэширования прокси, таких как лак и кальмар или кэширование на уровне приложений.

Если проблема вызвана кэшированием на стороне сервера, начнут не заставить сервер дать вам последние данные.


Для кэширования прокси, таких как кальмар, вещи разные. Обычно Squid добавляет некоторые дополнительные заголовки в ответ HTTP (response().info().headers).

Если вы видите поле заголовка под названием X-Cache или X-Cache-Lookup, Это означает, что вы напрямую не подключаетесь к удаленному серверу, но через прозрачный прокси.

Если у вас есть что-то вроде: X-Cache: HIT from proxy.domain.tld, Это означает, что ответ, который вы получили кэшируют. Наоборот X-Cache MISS from proxy.domain.tld, что означает, что ответ свежий.

Другие советы

Очень старый вопрос, но у меня была похожая проблема, которую этот раствор не разрешил.
В моем случае мне пришлось поднять пользовательский агент, как это:

request = urllib2.Request(url)
request.add_header('User-Agent', 'Mozilla/5.0')
content = urllib2.build_opener().open(request)

Надеюсь, это поможет кому-нибудь ...

Ваш веб-сервер или HTTP-прокси могут быть кэширован контент. Вы можете попробовать отключить кэширование, добавив Pragma: no-cache Заголовок запроса:

request = urllib2.Request(url)
request.add_header('Pragma', 'no-cache')
content = urllib2.build_opener().open(request)

Если вы вносите изменения и проверите поведение из браузера и от Urllib, легко сделать глупую ошибку. В браузере вы вошли в систему, но в Urllib.urlopen Ваше приложение может перенаправить вас всегда на той же странице входа в систему, поэтому, если вы просто видите размер страницы или верхнюю часть вашего общего макета, вы могли бы подумать, что ваши изменения не имеют никакого эффекта.

Мне трудно поверить, что Urllib2 не делает кэширование, потому что в моем случае, при перезапуске программы обновляется данные. Если программа не перезапускается, данные, кажется, кэшируются навсегда. Также получение тех же данных из Firefox никогда не возвращает устаревшие данные.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top