Domanda

Non ha menzionato questo nella documentazione pitone. E di recente sto testando un sito web semplicemente rinfrescante al sito utilizzando urllib2.urlopen () per estrarre determinati contenuti, a volte mi accorgo quando aggiorno il sito urllib2.urlopen () non sembra ottenere il contenuto appena aggiunto. Quindi mi chiedo che fa cose di cache da qualche parte, no?

È stato utile?

Soluzione

  

E allora mi chiedo che fa cose di cache da qualche parte, no?

Non è così.

Se non vedi i nuovi dati, questo potrebbe avere molte ragioni. La maggior parte dei servizi web più grandi utilizzano il caching lato server per motivi di prestazioni, ad esempio utilizzando proxy caching come vernici e Squid o a livello di applicazione nella cache.

Se il problema è causato dal caching lato server, usally non c'è modo per forzare il server a dare gli ultimi dati.


Per il caching proxy come calamari, le cose sono diverse. Di solito, calamari aggiunge alcune intestazioni aggiuntive per la risposta HTTP (response().info().headers).

Se si vede un campo di intestazione denominato X-Cache o X-Cache-Lookup, ciò significa che non si è connessi al server remoto direttamente, ma tramite un proxy trasparente.

Se hai qualcosa di simile: X-Cache: HIT from proxy.domain.tld, questo significa che la risposta avete ottenuto viene memorizzata nella cache. L'opposto è X-Cache MISS from proxy.domain.tld, il che significa che la risposta è fresco.

Altri suggerimenti

Molto vecchia questione, ma ho avuto un problema simile, che questa soluzione non ha risolto.
Nel mio caso ho dovuto falsificare l'User-Agent in questo modo:

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

Spero che questo aiuti a nessuno ...

Il vostro server web o un proxy HTTP possono essere caching dei contenuti. Si può cercare di caching disabilitare con l'aggiunta di un'intestazione di richiesta Pragma: no-cache:

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

Se si apportano modifiche e testare il comportamento dal browser e dal urllib, è facile fare un errore stupido. Nel browser effettuato l'accesso, ma in urllib.urlopen vostra applicazione potete favore usare sempre alla stessa pagina di login, quindi se si vede solo la dimensione della pagina o la parte superiore del vostro layout comune, si potrebbe pensare che le modifiche non hanno alcun effetto.

Lo trovo difficile credere che urllib2 non fa il caching, perché nel mio caso, al riavvio del programma i dati vengono aggiornati. Se il programma non viene riavviato, i dati sembra essere memorizzate nella cache per sempre. recuperando anche gli stessi dati da Firefox non restituisce i dati stantio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top