2015-08-30 1 views
1

Je veux utiliser la bibliothèque urllib3 pour faire une requête POST sur requests bibliothèque car il a la connexion de connexion et réessaie, etc. Mais je ne pouvais pas trouver n'importe quel remplacement de POST demande suivante.Comment transmettre des données à la méthode de requête POST urllib3?

import requests 
result = requests.post("http://myhost:8000/api/v1/edges", json={'node_id1':"VLTTKeV-ixhcGgq53", 'node_id2':"VLTTKeV-ixhcGgq51", 'type': 1 }) 

Cela fonctionne très bien avec requests bibliothèque, mais je ne pouvais pas convertir en urllib3 demande. J'ai essayé

import json 
import urllib3 
urllib3.PoolManager().request("POST","http://myhost:8000/api/v1/edges", body=json.dumps(dict(json={'node_id1':"VLTTKeV-ixhcGgq53", 'node_id2':"VLTTKeV-ixhcGgq51", 'type': 1 }))) 

problème est avec le passage des données JSON premières avec json comme clé dans POST demande.

Répondre

4

Vous n'avez pas besoin de l'argument mot-clé json; vous enveloppez votre dictionnaire dans un autre dictionnaire.

Vous aurez également besoin d'ajouter un en-tête Content-Type, réglez-le sur application/json:

http = urllib3.PoolManager() 
data = {'node_id1': "VLTTKeV-ixhcGgq53", 'node_id2': "VLTTKeV-ixhcGgq51", 'type': 1}) 
r = http.request(
    "POST", "http://myhost:8000/api/v1/edges", 
    body=json.dumps(data), 
    headers={'Content-Type': 'application/json'}) 
+0

Cela a fonctionné pour moi. –