Python 2.7 - Der Redirect-Handler übergibt keine Parameter beim Umleiten

8

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

    
code base 5000 06.08.2015, 10:08
quelle

1 Antwort

2

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 sie POST in GET ä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 :

%Vor%

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).

%Vor%     
saaj 12.08.2015 16:34
quelle

Tags und Links