2017-10-09 4 views
0

Je souhaite obtenir des données de service Web POST en python. A cet effet, j'ai essayé ci-dessous:Comment envoyer une requête POST en python et obtenir la bonne réponse json?

import requests 
import json 

headers = {'content-type': 'application/json','charset': 'utf-8'} 
url = 'https://a.b.c.com/count/WebService.asmx/ReadJSON' 
data = {'tick': '123456A123456B'} 
response = requests.post(url, data=json.dumps(data), headers=headers) 
print response.status_code 
print response.text 

Au-dessus de la sortie de code:

200 
{"a":""} 

Mais en fait, touche "a" a une valeur que je ne reçois pas. Je ne comprends pas que cela me donne un code d'état de 200, c'est-à-dire OK, alors pourquoi je ne suis pas capable d'obtenir la bonne réponse JSON. Est-ce que j'ai manqué quelque chose dans le code?

+0

utilisation 'response.json()' au lieu de 'response.text' et vous n'avez pas besoin de vider votre dictionnaire à la chaîne, vous pouvez passer comme est –

+0

Si je suis passé, la réponse = requests.post (url, data = data, headers = headers) J'obtiens {u'StackTrace ': u' ', u'Message': 'Une erreur est survenue lors du traitement de la requête', 'u'ExceptionType': u '' } Erreur. – kit

Répondre

2

Vous devez utiliser json=data pour transmettre json dans les requêtes, mais ne pas modifier manuellement les en-têtes, et vous devez utiliser response.json() pour obtenir le résultat json si vous vous en assurez.

import requests 

headers = {'charset': 'utf-8'} 
url = 'https://a.b.c.com/count/WebService.asmx/ReadJSON' 
data = {'tick': '123456A123456B'} 
response = requests.post(url, json=data, headers=headers) 
print response.status_code 
print response.json() 
+0

@ Sraw- S'il vous plaît voir ci-dessus commentaire. J'ai essayé votre solution, ça ne marche pas pour moi. J'obtiens la même sortie que celle montrée dans la réponse. – kit

+0

@kit Etes-vous sûr d'utiliser 'json = data' mais pas' data = data'? – Sraw

+0

@ Sraw- Oui. J'utilise json = data seulement. Je l'ai changé de data = data à json = data. – kit