Кэширует ли urllib2.urlopen () материал? - PullRequest
13 голосов
/ 27 августа 2010

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

Ответы [ 5 ]

10 голосов
/ 27 августа 2010

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

Это не так.

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

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


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

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

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

5 голосов
/ 04 апреля 2012

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

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

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

0 голосов
/ 07 июля 2016

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

0 голосов
/ 22 августа 2013

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

request = urllib2.Request(url)
request.add_header('Pragma', 'no-cache')
content = urllib2.build_opener().open(request)
0 голосов
/ 14 октября 2010

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

...