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?
Réponses
Trop de publicités?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()
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.
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