2010-08-27 15 views
9

No mencionaron esto en la documentación de Python. Y recientemente estoy probando un sitio web simplemente refrescando el sitio usando urllib2.urlopen() para extraer cierto contenido. De vez en cuando, cuando actualizo el sitio, urllib2.urlopen() parece no obtener el contenido recién agregado. Entonces me pregunto si guarda cosas en algún lugar, ¿verdad?¿Tiene urllib2.urlopen() caché cosas?

+0

Los servidores web también almacenan caché. Ese es el culpable habitual. Compruebe los encabezados en el resultado y ** actualice ** su pregunta para incluir 'info()'. –

+0

@ S.Lott: "Los servidores web también guardan cosas en caché" ¿Significa que si no obtuve los resultados actualizados usando urllib2.urlopen() que son principalmente servidores web "saber", me resulta refrescante y no me dan la actualización ¿cosas? ¿Hay alguna manera de obligar al servidor a transmitir los datos una y otra vez cada vez que actualizo el sitio? – Shane

+0

A menos que sepa un ** lote ** sobre el servidor web, realmente no sabe qué cachés tiene. Podría tener múltiples niveles de almacenamiento en caché. Podría haber configurado incorrectamente la memoria caché.Podría tener páginas que no proporcionan información para actualizar el caché. Muchas cosas pueden ir mal en el lado del servidor. –

Respuesta

9

Así que me pregunto si se almacenan las cosas en algún lugar, ¿verdad?

No lo es.

Si no ve datos nuevos, esto podría deberse a varios motivos. La mayoría de los servicios web más grandes usan el almacenamiento en caché del lado del servidor por razones de rendimiento, por ejemplo, utilizando proxys de almacenamiento en caché como Varnish y Squid o almacenamiento en caché a nivel de aplicación.

Si el problema es causado por el almacenamiento en caché del lado del servidor, generalmente no hay forma de obligar al servidor a proporcionarle los datos más recientes.


Para el caché de proxies como squid, las cosas son diferentes. Por lo general, 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 la memoria caché. Lo opuesto es X-Cache MISS from proxy.domain.tld, lo que significa que la respuesta es reciente.

+0

Gracias, ahora sé cuál es el problema. – Shane

-2

Me resulta difícil creer que urllib2 no hace el almacenamiento en caché, porque en mi caso, al reiniciar el programa, los datos se actualizan. Si el programa no se reinicia, los datos parecen almacenarse en caché para siempre. Además, recuperar los mismos datos de Firefox nunca devuelve datos obsoletos.

+2

urllib2 no hace el almacenamiento en caché. tal vez estés usando un proxy o la propia aplicación web esté almacenando datos temporales. –

5

Pregunta muy antigua, pero tuve un problema similar que esta solución no resolvió.
En mi caso tuvieron 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) 

la esperanza que esto ayude a ...

+0

Gracias! Tuve el mismo problema al descargar JSON de un feed drupal. Puede que esto no tenga nada que ver con su script de python real, sino con el servidor desde el que está descargando los datos. En nuestro caso, ese servidor almacenó el contenido en caché en función del agente de usuario. –

0

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

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

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

Cuestiones relacionadas