2015-08-03 1 views
1

J'ai essayé de faire une demande à une API, je dois passer le corps suivant:Comment puis-je faire une demande de publication sur Python avec urllib3?

{ 
"description":"Tenaris", 
"ticker":"TS.BA", 
"industry":"Metalúrgica", 
"currency":"ARS" 
} 

Altough le code semble avoir raison et il a fini avec « Processus terminé avec le code de sortie 0 », ça ne marche pas bien. Je ne sais pas ce que je suis absent, mais voici mon code:

http = urllib3.PoolManager() 
http.urlopen('POST', 'http://localhost:8080/assets', headers={'Content-Type':'application/json'}, 
       data={ 
"description":"Tenaris", 
"ticker":"TS.BA", 
"industry":"Metalúrgica", 
"currency":"ARS" 
}) 

Par ailleurs, ce premier jour de travail avec Python afin excusez-moi si je ne suis pas assez précis.

+0

Essayez de définir la valeur de retour de 'http.urlopen()' dans une variable et de l'imprimer. –

+0

try 'http.request' – user2954587

+0

Aussi, exécutez-vous cela dans un interpréteur interactif? ou un script? –

Répondre

6

Puisque vous essayez de transmettre une requête JSON, vous devez encoder le corps en JSON et le transmettre avec le champ body.

Pour votre exemple, vous voulez faire quelque chose comme:

import json 
encoded_body = json.dumps({ 
     "description": "Tenaris", 
     "ticker": "TS.BA", 
     "industry": "Metalúrgica", 
     "currency": "ARS", 
    }) 

http = urllib3.PoolManager() 

r = http.request('POST', 'http://localhost:8080/assets', 
       headers={'Content-Type': 'application/json'}, 
       body=encoded_body) 

print r.read() # Do something with the response? 

Edit: Ma réponse originale était erronée. Mise à jour pour encoder le JSON. En outre, question connexe: How do I pass raw POST data into urllib3?

+0

Il ne semble pas que 'fields' va encoder le corps en JSON, ce que je pense que OP veut. –

+1

Ah, c'est vrai. Modification – shazow