Ich habe eine URL, die ich auf eine Website treffe, die verschoben werden kann, und wenn der Endpunkt verschoben wird, müssen die POST / GET-Parameter erneut angewendet werden. Was fehlt mir, um sicherzustellen, dass dieser Handler dies tut?
%Vor%Wenn ich den Datenverkehr durch den Fiddler beobachte, bemerke ich, dass das Token, das für die Authentifizierung verwendet wird, gelöscht wird.
(Bitte beachten Sie, dass ich Anfragen für diese Lösung nicht verwenden kann, es muss nur eine Standardbibliothek sein)
Danke
Die Geschichte der Statuscodes 302, 303 und 307 von HTTP 1.0 und 1.1 ist etwas kompliziert. Im Grunde sehen Sie das erwartete und dokumentierte Verhalten (Sie können sich auch diese Antwort für eine längere Beschreibung):
Die Standardimplementierung dieser Methode folgt nicht genau RFC 2616 , die besagt, dass 301 und 302 Antworten auf
POST
-Anforderungen dürfen nicht automatisch ohne Bestätigung des Benutzers umgeleitet werden. In Wirklichkeit erlauben Browser die automatische Umleitung dieser Antworten, indem siePOST
inGET
ändern, und die Standardimplementierung gibt dieses Verhalten wieder.
Und Sie gehen den richtigen Weg, aber überschreiben Sie die falschen Methoden. Hier ist die Quelle von urllib2.HTTPRedirectHandler.redirect_request
:
Mehrere Beobachtungen hier. Es übergibt data
nicht, daher lautet die neue Anfrage GET
. Es filtert die Header content-length
und content-type
heraus, die für eine korrekte POST
benötigt werden. Wenn in meinem Beispiel req.headers
ein leeres Diktat ist, habe ich auf req.header_items()
zurückgegriffen (siehe unredirected_hdrs
). Darüber hinaus behandelt POST
und 307 redirect nicht.
Hier ist eine korrekte Redirector-Handler-Implementierung für POST und 302 Redirect. Hier ist auch die komplette CherryPy-Simulation (% pip install cherrypy
vorher).
Tags und Links python python-2.7 urllib2 urllib