Ich möchte einen Curl-Befehl in Python ausführen.
Normalerweise muss ich nur den Befehl im Terminal eingeben und die Eingabetaste drücken. Ich weiß jedoch nicht, wie es in Python funktioniert.
Der Befehl zeigt unten:
curl -d @request.json --header "Content-Type: application/json" https://www.googleapis.com/qpxExpress/v1/trips/search?key=mykeyhere
Es muss eine request.json-Datei gesendet werden, um eine Antwort zu erhalten.
Ich habe viel gesucht und war verwirrt. Ich habe versucht, einen Code zu schreiben, obwohl ich ihn nicht vollständig verstehen konnte. Es hat nicht funktioniert.
import pycurl
import StringIO
response = StringIO.StringIO()
c = pycurl.Curl()
c.setopt(c.URL, 'https://www.googleapis.com/qpxExpress/v1/trips/search?key=mykeyhere')
c.setopt(c.WRITEFUNCTION, response.write)
c.setopt(c.HTTPHEADER, ['Content-Type: application/json','Accept-Charset: UTF-8'])
c.setopt(c.POSTFIELDS, '@request.json')
c.perform()
c.close()
print response.getvalue()
response.close()
Die Fehlermeldung lautet "Fehler analysieren". Kann mir jemand sagen, wie ich das Problem beheben kann? oder wie bekomme ich die Antwort vom Server richtig?
Antworten:
Der Einfachheit halber sollten Sie möglicherweise die Verwendung der Anforderungsbibliothek in Betracht ziehen .
Ein Beispiel mit json-Antwortinhalten wäre etwa:
Wenn Sie nach weiteren Informationen suchen, finden Sie im Abschnitt Schnellstart viele Arbeitsbeispiele.
BEARBEITEN:
Für Ihre spezifische Curl-Übersetzung:
quelle
'Accept-Charset': 'UTF-8'
Requests
ist eine zusätzliche Abhängigkeit, die Sie installieren und verwalten müssen. Eine einfache Lösung, die nur die Standardbibliothek verwendet, finden Sie unter stackoverflow.com/a/13921930/111995Verwenden Sie einfach diese Website . Jeder Curl-Befehl wird in Python, Node.js, PHP, R oder Go konvertiert.
Beispiel:
Wird dies in Python,
quelle
vielleicht?
Wenn Sie versuchen, eine Datei zu senden
ahh danke @LukasGraf jetzt verstehe ich besser, was sein ursprünglicher Code tut
quelle
requests.json
Datei ein und setzt denContent-Type: application/json
Header nicht - außerdem wird eineGET
Anfrage gesendet, keinePOST
.curl -d @<file>
liest die Felder , aus denen gepostet werden soll<file>
- das ist nicht dasselbe wie das Hochladen von Dateien.data = requests.get(url).json
sollte seindata = requests.get(url).json()
seine Python-Implementierung ist wie
Wenn Sie diesen Link überprüfen , können Sie den Befehl cURl in Python, PHP und NodeJS konvertieren
quelle
Meine Antwort lautet WRT Python 2.6.2.
Ich entschuldige mich dafür, dass ich die erforderlichen Parameter nicht angegeben habe, da dies vertraulich ist.
quelle
Einige Hintergrundinformationen: Ich habe genau nach dieser Frage gesucht, weil ich etwas tun musste, um Inhalte abzurufen, aber alles, was mir zur Verfügung stand, war eine alte Version von Python mit unzureichender SSL-Unterstützung. Wenn Sie ein älteres MacBook verwenden, wissen Sie, wovon ich spreche. Läuft auf jeden Fall
curl
gut über eine Shell (ich vermute, es ist moderne SSL-Unterstützung eingebunden), so dass Sie dies manchmal tun möchten, ohnerequests
oder zu verwendenurllib2
.Sie können das
subprocess
Modul verwenden, umcurl
den abgerufenen Inhalt auszuführen und abzurufen:Das
subprocess
Modul von Python 3 enthält außerdem.run()
eine Reihe nützlicher Optionen. Ich überlasse es jemandem, der tatsächlich Python 3 ausführt, diese Antwort zu geben.quelle
Dies könnte mit dem unten erwähnten Pseudo-Code-Ansatz erreicht werden
Import os Importanfragen Data = os.execute (Curl URL) R = Data.json ()
quelle