¿Tiene urllib2.urlopen () cosas de caché?

No mencionaron esto en la documentación de Python. Y recientemente estoy probando un sitio web simplemente actualizando el sitio utilizando urllib2.urlopen () para extraer cierto contenido, me doy cuenta de que a veces cuando actualizo el sitio urllib2.urlopen () parece no obtener el contenido recién agregado. Así que me pregunto si hace cosas de caché en algún lugar, ¿verdad?

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

No lo hace

Si no ve datos nuevos, 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 servidores proxy de almacenamiento en caché como Varnish y Squid o el almacenamiento en caché a nivel de aplicación.

Si el problema se debe al almacenamiento en caché del lado del servidor, por lo general no hay forma de forzar al servidor a que le proporcione los datos más recientes.


Para los servidores proxy de caché como el calamar, las cosas son diferentes. Normalmente, squid agrega algunos encabezados adicionales a la respuesta HTTP ( response().info().headers ).

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

Si tiene algo como: X-Cache: HIT from proxy.domain.tld , esto significa que la respuesta que obtuvo está en caché. Lo opuesto es X-Cache MISS from proxy.domain.tld , lo que significa que la respuesta es nueva.

Muy antigua pregunta, pero tuve un problema similar que esta solución no resolvió.
En mi caso tuve que engañar al User-Agent de esta manera:

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

Espero que esto ayude a alguien …

Su servidor web o un proxy HTTP puede estar almacenando contenido en caché. Puede intentar deshabilitar el almacenamiento en caché agregando un encabezado de solicitud Pragma: no-cache :

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

Si realiza cambios y prueba el comportamiento desde el navegador y desde urllib, es fácil cometer un error estúpido. En el navegador, está conectado, pero en urllib.urlopen su aplicación puede redirigirlo siempre a la misma página de inicio de sesión, por lo que si solo ve el tamaño de página o la parte superior de su diseño común, podría pensar que sus cambios no tienen efecto.

Me cuesta creer que urllib2 no haga el almacenamiento en caché, porque en mi caso, al reiniciar el progtwig, los datos se actualizan. Si el progtwig no se reinicia, los datos parecen estar almacenados en caché para siempre. Además, recuperar los mismos datos de Firefox nunca devuelve datos obsoletos.