Python demandes module: encodage des données json

Je suis en train de travailler sur une API wrapper. La spécification je suis en train de construire a la demande suivante:

curl -H "Content-type:application/json" -X POST -d data='{"name":"Partner13", "email":"[email protected]"}' http://localhost:5000/

Cette demande génère la réponse suivante à partir d'un petit serveur de test, j'ai installé pour voir exatly ce que les en-têtes/params etc sont envoyés comme. Ce petit script produit:

uri: http://localhost:5000/,
method: POST,
api_key: None,
content_type: application/json,
params: None,
data: data={"name":"Partner13", "email":"[email protected]"}

De sorte que ci-dessus est le résultat que je veux que mon script python pour créer quand il frappe le petit script de test.

Je suis en utilisant le python demandes de module, qui est la plus belle HTTP lib que j'ai jamais utilisé. Donc voici mon code python:

uri = "http://localhost:5000/"
headers = {'content-type': 'application/json' }
params = {}
data = {"name":"Partner13", "email":"[email protected]"}
params["data"] = json.dumps(data)
r = requests.post(uri, data=params, headers=headers)

Donc assez simple de trucs. Définir les en-têtes, et de créer un dictionnaire pour les paramètres POST. Ce dictionnaire a une entrée appelée "data" qui est la chaîne JSON des données que je veux envoyer au serveur. Ensuite, j'appelle la poste. Cependant, le résultat de mon petit script de test donne de l'est:

uri: http://localhost:5000/,
method: POST,
api_key: None,
content_type: application/json,
params: None,
data: data=%7B%22name%22%3A+%22Partner13%22%2C+%22email%22%3A+%22example%40example.com%22%7D

Donc, essentiellement, les données json que je voulais l'envoyer sous le paramètre de données a été urlendcoded.

Personne ne sait comment résoudre ce problème? J'ai regardé à travers les demandes de documentation et n'arrive pas à trouver un moyen de ne pas automatique urlencode l'envoi de données.

Merci beaucoup
Kevin

Les données de votre curl exemple n'est pas valide json. C'est un mélange entre la forme de codage et json.

OriginalL'auteur kevin | 2013-04-01