Frage

Ich bin mit urllib2 Daten in eine Form zu veröffentlichen. Das Problem ist, dass die Form mit einer 302-Umleitung antwortet. Nach Python HTTPRedirectHandler die Umleitungs-Handler die Anforderung nehmen und konvertieren sie von POST GET und folgen den 301 oder 302 I die POST-Methode und die Daten möchte die opener weitergegeben bewahren. Ich machte einen erfolglosen Versuch, in einem benutzerdefinierten HTTPRedirectHandler durch einfaches data = req.get_data Hinzufügen () auf den neuen Antrag.

Ich bin sicher, dass dies vorher getan worden ist, so dachte ich, ich würde einen Beitrag machen.

Hinweis: Dies ist ähnlich href="https://stackoverflow.com/questions/554446/how-do-i-prevent-pythons-urllib2-from-following-a-redirect"> diesen Beitrag und dieses aber ich will nicht die Umleitung verhindern ich möchte nur die POST-Daten halten.

Hier ist mein HTTPRedirectHandler, das nicht funktioniert

class MyHTTPRedirectHandler(urllib2.HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
    """Return a Request or None in response to a redirect.

    This is called by the http_error_30x methods when a
    redirection response is received.  If a redirection should
    take place, return a new Request to allow http_error_30x to
    perform the redirect.  Otherwise, raise HTTPError if no-one
    else should try to handle this url.  Return None if you can't
    but another Handler might.
    """
    m = req.get_method()
    if (code in (301, 302, 303, 307) and m in ("GET", "HEAD")
        or code in (301, 302, 303) and m == "POST"):
        # Strictly (according to RFC 2616), 301 or 302 in response
        # to a POST MUST NOT cause a redirection without confirmation
        # from the user (of urllib2, in this case).  In practice,
        # essentially all clients do redirect in this case, so we
        # do the same.
        # be conciliant with URIs containing a space
        newurl = newurl.replace(' ', '%20')
        return Request(newurl,
                       headers=req.headers,
                       data=req.get_data(),
                       origin_req_host=req.get_origin_req_host(),
                       unverifiable=True)
    else:
        raise HTTPError(req.get_full_url(), code, msg, headers, fp)
War es hilfreich?

Lösung

Dies ist eigentlich eine wirklich schlechte Sache, je mehr ich darüber nachgedacht, es zu tun. Zum Beispiel einreichen, wenn ich ein Formular http://example.com/add (mit Post-Daten ein Element hinzufügen) und die Antwort ist eine 302-Umleitung an http://example.com/add und I post die gleichen Daten, die ich das erste Mal habe ich geschrieben in einer Endlosschleife enden. Nicht sicher, warum ich noch nicht daran denken war. Ich werde die Frage hier nur als Warnung an alle verlassen sonst darüber nachzudenken, dies zu tun.

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