61 votes

Faire un appel POST au lieu de GET en utilisant urllib2

Il y a beaucoup de choses sur les appels urllib2 et POST, mais je suis bloqué sur un problème.

J'essaie de faire un simple appel POST à un service :

 url = 'http://myserver/post_service'
data = urllib.urlencode({'name' : 'joe',
                         'age'  : '10'})
content = urllib2.urlopen(url=url, data=data).read()
print content

Je peux voir les journaux du serveur et il dit que je fais des appels GET, quand j'envoie les données argument à urlopen.

La bibliothèque génère une erreur 404 (introuvable), ce qui est correct pour un appel GET, les appels POST sont bien traités (j'essaie également avec un POST dans un formulaire HTML).

48voto

Gregg Points 1609

Vous avez peut-être déjà répondu à cette question : Python URLLib / URLLib2 POST .

Votre serveur effectue probablement une redirection 302 de http://myserver/post_service vers http://myserver/post_service/ . Lorsque la redirection 302 est effectuée, la demande passe de POST à GET (voir Issue 1401 ). Essayez de changer url en http://myserver/post_service/ .

6voto

Michael Kent Points 830

Le module de requêtes peut soulager votre douleur.

 url = 'http://myserver/post_service'
data = dict(name='joe', age='10')

r = requests.post(url, data=data, allow_redirects=True)
print r.content

5voto

Corey Goldberg Points 15625

il devrait envoyer un POST si vous fournissez un paramètre de données (comme vous le faites):

de la doc : "la requête HTTP sera un POST au lieu d'un GET lorsque le paramètre de données est fourni"

donc .. ajoutez une sortie de débogage pour voir ce qui se passe du côté client.

vous pouvez modifier votre code et réessayer :

 import urllib
import urllib2

url = 'http://myserver/post_service'
opener = urllib2.build_opener(urllib2.HTTPHandler(debuglevel=1))
data = urllib.urlencode({'name' : 'joe',
                         'age'  : '10'})
content = opener.open(url, data=data).read()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X