J'utilise urllib2 pour publier des données dans un formulaire. Le problème est que le formulaire répond avec une redirection 302. Selon Python HTTPRedirectHandler le gestionnaire de redirection prendra la demande et la convertira de POST à GET et suivra le 301 ou 302. Je voudrais préserver la méthode POST et les données passées à l'ouvreur. J'ai fait une tentative infructueuse à un HTTPRedirectHandler personnalisé en ajoutant simplement data = req.get_data() à la nouvelle demande.Comment faire python urllib2 suivre la méthode de redirection et de maintien
Je suis sûr que cela a déjà été fait, alors j'ai pensé que je ferais un post.
Remarque: ceci est similaire à this post et this one mais je ne veux pas empêcher la redirection que je veux juste conserver les données POST.
Voici mon HTTPRedirectHandler qui ne fonctionne pas
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)
Le formulaire sur lequel vous travaillez est-il sur Internet? J'ai quelques idées sur la façon de diagnostiquer ce qui se passe, mais pas de réponse correcte pour l'instant; J'aimerais enquêter, cependant. –