Pregunta

Ellos no mencionaron esto en la documentación de Python. Y recientemente estoy probando un sitio web simplemente refrescar el sitio usando urllib2.urlopen () para extraer ciertos contenidos, noto a veces, cuando se actualiza el sitio urllib2.urlopen () no parece obtener el contenido recién agregado. Por eso me pregunto lo hace en alguna materia caché, ¿verdad?

¿Fue útil?

Solución

  

Así que me pregunto que hace cosas caché en algún lugar, ¿verdad?

No es así.

Si no ve los nuevos datos, esto podría tener muchas razones. La mayoría de los servicios web más grandes utilizan el almacenamiento en caché del lado del servidor por razones de rendimiento, por ejemplo, el uso de proxies de almacenamiento en caché como barniz y calamar o el almacenamiento en caché de nivel de aplicación.

Si el problema es causado por el almacenamiento en caché del lado del servidor, Normalamente no hay manera de forzar al servidor para darle los últimos datos.


Para el almacenamiento en caché proxy como el calamar, las cosas son diferentes. Por lo general, el calamar añade algunas cabeceras adicionales a la respuesta HTTP (response().info().headers).

Si ve un campo de cabecera llamada X-Cache o X-Cache-Lookup, esto significa que no está conectado al servidor remoto directamente, sino a través de un proxy transparente.

Si usted tiene algo así como: X-Cache: HIT from proxy.domain.tld, esto significa que la respuesta que tenemos es almacenado en caché. Lo contrario es X-Cache MISS from proxy.domain.tld, lo que significa que la respuesta es fresco.

Otros consejos

Muy vieja pregunta, pero he tenido un problema similar que esta solución no resolvió.
En mi caso tuve que falsificar la User-Agent como esto:

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

Espero que esto ayude a nadie ...

Su servidor web o un servidor proxy HTTP pueden ser en caché de contenido. Usted puede tratar de desactivar el almacenamiento en caché mediante la adición de un encabezado de solicitud Pragma: no-cache:

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

Si se realizan cambios y probar el comportamiento de navegador y de urllib, es fácil cometer un error estúpido. En navegador que está en el sistema, pero en urllib.urlopen su aplicación puede redirigir siempre a la misma página de inicio de sesión, por lo que si usted acaba de ver el tamaño de página o la parte superior de su diseño común, se podría pensar que los cambios no tienen efecto.

Me resulta difícil creer que urllib2 no hace el almacenamiento en caché, ya que en mi caso, al reiniciar el programa se actualiza los datos. Si el programa no se reinicia, los datos parecen ser almacenado en caché para siempre. También la recuperación de los mismos datos desde Firefox nunca vuelve rancio de datos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top