2010-12-29 8 views
1

Ich versuche herauszufinden, wie eine pycurl "POST" an eine REST-Schnittstelle (in diesem Fall Neo4j) zu senden.brauche Hilfe beim Verschieben von Curl nach Pycurl

Ich kann es über CURL tun mit:

curl -HContent-Type:application/json -X POST -d '"http://localhost:7474/db/data/node/123"' http://localhost:7474/db/data/index/node/persons/name/peter 

... aber ich kann nicht herausfinden, wie diese Optionen mit CURL zu übersetzen. Dies ist der nächste, den ich bekommen habe, aber es schlägt fehl

data = "http://localhost:7474/db/data/node/123" 
headers = {"Content-Type": "application/json"} 
url_dir = "http://localhost:7474/db/data/index/node/persons/name/peter" 

conn = pycurl.Curl() 
c.setopt(pycurl.URL, url_dir) 
c.setopt(pycurl.HTTPHEADER, headers) 

was mache ich mit den zu übertragenden Daten?

edit: mit Daten meine ich die Variable mit dem Titel Daten. Wie sende ich die Daten (was in der Option -d enthalten ist) über pycurl. Ich habe versucht, es zu urlencode, aber einen Fehler (offensichtlich wegen seines Typs) erhalten. Ich habe versucht, urllib.quote_plus(), aber das ist eine 400 Fehler im REST-Dienst verursacht. Ich vermute, dass dies das Problem ist, da meine GETs gut funktionieren.

Antwort

3

Anfügen diese Aussagen helfen können:

c.setopt(pycurl.POST, 1) 
c.setopt(pycurl.POSTFIELDS, data) 

Schauen Sie sich die „HTTP POST“ des libcurl tutorial für weitere Informationen.

Hinweis 1: Wenn die Zeichenfolge data in doppelte Anführungszeichen eingeschlossen werden muss, sollten Sie Folgendes tun: c.setopt(pycurl.POSTFIELDS, '"%s"' % data).

Hinweis 2: Ich denke, Sie haben einen Tippfehler gemacht: die conn Variable muss c genannt werden.

+0

Vielen Dank. Ich werde deine Vorschläge versuchen. Auch in Bezug auf den Tippfehler war das ein Versehen meinerseits - es war das Ergebnis des Einfügens aus zwei verschiedenen Quellen. – swasheck

+0

danke !!!! "Note 1" war was ich brauchte – swasheck

Verwandte Themen