Wenn man sich die Quelle von urllib2 ansieht, scheint es am einfachsten zu sein, HTTPRedirectHandler in eine Unterklasse zu unterteilen und dann build_opener zu verwenden, um den Standard-HTTPRedirectHandler zu überschreiben. Dies scheint jedoch eine Menge (relativ komplizierter) Arbeit zu sein, um das zu tun, was es sein sollte ziemlich einfach.
92
Antworten:
Hier ist der Weg der Anfragen :
quelle
r.headers['Location']
zu sehen, wohin es Sie geschickt hätteLocation
zulocation
.requests
können Sie auf Header sowohl in kanonischer Form als auch in Kleinbuchstaben zugreifen. Siehe docs.python-requests.org/en/master/user/quickstart/…Dive Into Python hat ein gutes Kapitel zum Umgang mit Weiterleitungen mit urllib2. Eine andere Lösung ist httplib .
quelle
Dies ist ein urllib2-Handler, der Weiterleitungen nicht folgt:
quelle
Das
redirections
Schlüsselwort in derhttplib2
Anforderungsmethode ist ein roter Hering. Anstatt die erste Anforderung zurückzugeben, wird eineRedirectLimit
Ausnahme ausgelöst, wenn ein Umleitungsstatuscode empfangen wird. Um wieder die inital Antwort , die Sie festlegen müssen ,follow_redirects
umFalse
auf dasHttp
Objekt:quelle
Ich nehme an, das würde helfen
quelle
Ich bin der zweite Zeiger von olt, um in Python einzutauchen . Hier ist eine Implementierung mit urllib2-Redirect-Handlern, mehr Arbeit als es sein sollte? Vielleicht Achselzucken.
quelle
Der kürzeste Weg ist jedoch
quelle
opener = urllib.request.build_opener(debugHandler, NoRedirect())
WodebugHandler=urllib.request.HTTPHandler()
unddebugHandler.set_http_debuglevel (1)
. Am Ende:urllib.request.install_opener(opener)