Frage

Sie haben erwähnen dies nicht in Python-Dokumentation. Und vor kurzem teste ich eine Website einfach die Website erfrischend mit urllib2.urlopen (), um bestimmte Inhalte zu extrahieren, merke ich manchmal, wenn ich die Seite urllib2.urlopen aktualisieren () scheint die neu hinzugefügte Inhalte nicht bekommen. Also habe ich es tut Cache Sachen irgendwo fragen sich, nicht wahr?

War es hilfreich?

Lösung

So frage ich mich, es tut Cache Zeug irgendwo, nicht wahr?

Es ist nicht.

Wenn Sie keine neuen Daten sehen Sie, könnte dies viele Gründe haben. Die meisten größeren Web-Service verwenden serverseitige Caching aus Performance-Gründen, zum Beispiel unter Verwendung von Caching Proxy wie Varnish und Squid oder Application-Level-Caching.

Wenn das Problem durch serverseitiges Caching verursacht wird, usally gibt es keine Möglichkeit, den Server zu zwingen, um die neuesten Daten zu geben.


Für Proxies wie Tintenfisch Cachen, sind die Dinge anders. Normalerweise Tintenfisch fügt einige zusätzliche Header der HTTP-Antwort (response().info().headers).

Wenn Sie sehen, ein Header-Feld namens X-Cache oder X-Cache-Lookup, bedeutet dies, dass Sie nicht mit dem Remote-Server direkt verbunden sind, sondern durch einen transparenten Proxy.

Wenn Sie so etwas wie haben: X-Cache: HIT from proxy.domain.tld, bedeutet dies, dass die Antwort, die Sie bekam zwischengespeichert. Das Gegenteil ist X-Cache MISS from proxy.domain.tld, was bedeutet, dass die Antwort frisch ist.

Andere Tipps

Sehr alte Frage, aber ich hatte ein ähnliches Problem, das diese Lösung nicht behoben werden konnte.
In meinem Fall hatte ich den User-Agenten so fälschen:

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

Hope, das hilft jemand ...

Ihr Web-Server oder ein HTTP-Proxy kann das Caching Inhalte werden. Sie können durch Hinzufügen eines Pragma: no-cache Request-Header zu deaktivieren Caching versuchen:

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

Wenn Sie Änderungen und testen Sie das Verhalten von Browser und von urllib machen, ist es einfach, einen dummen Fehler zu machen. Im Browser sind Sie angemeldet, aber in urllib.urlopen Ihrer App können Sie immer auf die gleiche Login-Seite umleiten, so dass, wenn Sie nur die Seitengröße oder die Spitze Ihres gemeinsamen Layout sehen, könnte man denken, dass die Änderungen keine Auswirkungen.

Ich finde es hart, dass urllib2 zu glauben, nicht-Caching nicht tun, weil in meinem Fall nach dem Neustart des Programms der Daten aktualisiert werden. Wenn das Programm nicht neu gestartet wird, werden die Daten für immer im Cache gespeichert werden. Auch das Abrufen der gleichen Daten von Firefox nie veraltete Daten zurückgibt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top