it-swarm.com.de

Wie verwende ich python, um einen Curl-Befehl auszuführen?

Ich möchte einen Curl-Befehl in Python ausführen.

Normalerweise muss ich nur den Befehl im Terminal eingeben und die Eingabetaste drücken. Allerdings weiß ich nicht, wie es in Python funktioniert.

Der Befehl wird unten angezeigt:

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 Teil des Codes 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 "Parse Error". Kann mir jemand sagen, wie ich das Problem beheben kann? oder wie bekomme ich die richtige antwort vom server?

122
Qiang Fu

Der Einfachheit halber sollten Sie vielleicht die Requests Bibliothek verwenden.

Ein Beispiel mit json-Antwortinhalten wäre etwa:

import requests
r = requests.get('https://github.com/timeline.json')
r.json()

Wenn Sie nach weiteren Informationen suchen, finden Sie im Abschnitt Schnellstart viele Arbeitsbeispiele.

EDIT:

Für Ihre spezifische Lockenübersetzung:

import requests
url = 'https://www.googleapis.com/qpxExpress/v1/trips/search?key=mykeyhere'
payload = open("request.json")
headers = {'content-type': 'application/json', 'Accept-Charset': 'UTF-8'}
r = requests.post(url, data=payload, headers=headers)
139
otorrillas

Verwenden Sie einfach diese Website . Es konvertiert jeden Curl-Befehl in Python, Node.js, PHP, R oder Go.

Beispiel:

curl -X POST -H 'Content-type: application/json' --data '{"text":"Hello, World!"}' https://hooks.slack.com/services/asdfasdfasdf

Wird dies in Python,

import requests

headers = {
    'Content-type': 'application/json',
}

data = '{"text":"Hello, World!"}'

response = requests.post('https://hooks.slack.com/services/asdfasdfasdf', headers=headers, data=data)
58
import requests
url = "https://www.googleapis.com/qpxExpress/v1/trips/search?key=mykeyhere"
data = requests.get(url).json

vielleicht?

wenn Sie versuchen, eine Datei zu senden

files = {'request_file': open('request.json', 'rb')}
r = requests.post(url, files=files)
print r.text, print r.json

ahh danke @LukasGraf jetzt verstehe ich besser, was sein ursprünglicher Code tut

import requests,json
url = "https://www.googleapis.com/qpxExpress/v1/trips/search?key=mykeyhere"
my_json_data = json.load(open("request.json"))
req = requests.post(url,data=my_json_data)
print req.text
print 
print req.json # maybe? 
17
Joran Beasley
curl -d @request.json --header "Content-Type: application/json" https://www.googleapis.com/qpxExpress/v1/trips/search?key=mykeyhere

die Implementierung von python ist wie folgt

import requests

headers = {
    'Content-Type': 'application/json',
}

params = (
    ('key', 'mykeyhere'),
)

data = open('request.json')
response = requests.post('https://www.googleapis.com/qpxExpress/v1/trips/search', headers=headers, params=params, data=data)

#NB. Original query string below. It seems impossible to parse and
#reproduce query strings 100% accurately so the one below is given
#in case the reproduced version is not "correct".
# response = requests.post('https://www.googleapis.com/qpxExpress/v1/trips/search?key=mykeyhere', headers=headers, data=data)

Aktivieren Sie diesen Link, um den Befehl cURl in Python, PHP und Nodejs umzuwandeln

15
cryptoKTM

Es gibt eine nette Website https://curl.trillworks.com/ , die die Konvertierung für Sie vornimmt. Es konvertiert von cURL nach Python, Node.js, R, PHP, Go.

8
Edgar Manukyan

Meine Antwort lautet WRT python 2.6.2.

import commands

status, output = commands.getstatusoutput("curl -H \"Content-Type:application/json\" -k -u (few other parameters required) -X GET https://example.org -s")

print output

Ich entschuldige mich dafür, dass ich nicht die erforderlichen Parameter angegeben habe, da diese vertraulich sind.

4
apoorva_bhat

Hintergrund: Ich habe genau nach dieser Frage gesucht, weil ich etwas tun musste, um Inhalte abzurufen, aber alles, was ich zur Verfügung hatte, war eine alte Version von python mit unzureichender SSL-Unterstützung. Wenn Sie mit einem älteren MacBook arbeiten, wissen Sie, wovon ich spreche. In jedem Fall läuft curl einwandfrei von einer Shell aus (ich vermute, sie hat moderne SSL-Unterstützung). Manchmal möchten Sie dies tun, ohne requests oder urllib2 zu verwenden.

Sie können das Modul subprocess verwenden, um curl auszuführen und den abgerufenen Inhalt abzurufen:

import subprocess

// 'response' contains a []byte with the retrieved content.
// use '-s' to keep curl quiet while it does its job, but
// it's useful to omit that while you're still writing code
// so you know if curl is working
response = subprocess.check_output(['curl', '-s', baseURL % page_num])

Das subprocess -Modul von Python 3 enthält auch .run() mit einer Reihe nützlicher Optionen. Ich überlasse es jemandem, der gerade python 3 ausführt, diese Antwort zu geben.

2
joemadeus
import requests

headers = {
    'Content-Type': 'application/json',
}

params = (
    ('key', 'mykeyhere'),
)

data = open('request.json')
response = requests.post('https://www.googleapis.com/qpxExpress/v1/trips/search', headers=headers, params=params, data=data)

#NB. Original query string below. It seems impossible to parse and
#reproduce query strings 100% accurately so the one below is given
#in case the reproduced version is not "correct".
# response = requests.post('https://www.googleapis.com/qpxExpress/v1/trips/search?key=mykeyhere', headers=headers, data=data)
0
Shafay