70 votes

urllib2 et json

Quelqu'un peut-il signaler un tutoriel qui me montre comment effectuer une demande POST en utilisant urllib2 avec les données au format JSON?

136voto

Bob Van Zant Points 822

La réponse de Messa ne fonctionne que si le serveur ne veut pas vérifier l'en-tête de type de contenu. Vous devrez spécifier un en-tête de type de contenu si vous voulez que cela fonctionne vraiment. Voici la réponse de Messa modifiée pour inclure un en-tête de type de contenu:

 import json
import urllib2
data = json.dumps([1, 2, 3])
req = urllib2.Request(url, data, {'Content-Type': 'application/json'})
f = urllib2.urlopen(req)
response = f.read()
f.close()
 

36voto

CloudMarc Points 81

Tout ce que urllib utilise pour déterminer Content-Length semble dérouté par json, vous devez donc le calculer vous-même.

 import json
import urllib2
data = json.dumps([1, 2, 3])
clen = len(data)
req = urllib2.Request(url, data, {'Content-Type': 'application/json', 'Content-Length': clen})
f = urllib2.urlopen(req)
response = f.read()
f.close()
 

Cela m’a pris pour toujours, alors j’espère que cela aidera quelqu'un d’autre.

17voto

Messa Points 5988

Exemple - envoi de données codées au format JSON en tant que données POST:

 import json
import urllib2
data = json.dumps([1, 2, 3])
f = urllib2.urlopen(url, data)
response = f.read()
f.close()
 

5voto

eseceve Points 101
import json
import urllib
import urllib2

post_params = {
    'foo' : bar
}

params = urllib.urlencode(post_params)
response = urllib2.urlopen(url, params)
json_response = json.loads(response.read())

3voto

Stan Points 2550

Vous voulez certainement pirater l'en-tête pour avoir une requête Ajax appropriée:

 headers = {'X_REQUESTED_WITH' :'XMLHttpRequest',
           'ACCEPT': 'application/json, text/javascript, */*; q=0.01',}
request = urllib2.Request(path, data, headers)
response = urllib2.urlopen(request).read()
 

Et json.loads le POST sur le côté serveur.

Edit: Au fait, vous devez urllib.urlencode(mydata_dict) avant de les envoyer. Sinon, le POST ne sera pas ce que le serveur attend

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