Ik wil een curl-opdracht uitvoeren in Python.
Meestal hoeft ik alleen maar de opdracht in de terminal in te voeren en op de retoursleutel te drukken. Ik weet echter niet hoe het in Python werkt.
De opdrachthows hieronder:
curl -d @request.json --header "Content-Type: application/json" https://www.googleapis.com/qpxExpress/v1/trips/search?key=mykeyhere
Er is een request.json
bestand om te worden verzonden om een reactie te krijgen.
Ik zocht veel en werd in de war. Ik heb geprobeerd een stuk code te schrijven, hoewel ik het niet volledig kon begrijpen en het werkte niet.
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()
Het foutbericht is Parse Error
. Hoe een reactie van de server correct te krijgen?
1, Autoriteit 100%
Omwille van de eenvoud, zou u moeten overwegen om de aanvragen bibliotheek te gebruiken.
Een voorbeeld met de inhoud van JSON-respons zou zoiets zijn als:
import requests
r = requests.get('https://github.com/timeline.json')
r.json()
Als je meer informatie zoekt, ga dan naar de Quickstartsectie , ze hebben veel werkende voorbeelden.
BEWERKEN:
Voor uw specifieke krulvertaling:
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)
Antwoord 2, autoriteit 56%
Gebruik gewoon deze website. Het converteert elk curl-commando naar Python, Node.js, PHP, R of Go.
Voorbeeld:
curl -X POST -H 'Content-type: application/json' --data '{"text":"Hello, World!"}' https://hooks.slack.com/services/asdfasdfasdf
Wordt dit 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)
Antwoord 3, autoriteit 10%
import requests
url = "https://www.googleapis.com/qpxExpress/v1/trips/search?key=mykeyhere"
data = requests.get(url).json
misschien?
als u een bestand probeert te verzenden
files = {'request_file': open('request.json', 'rb')}
r = requests.post(url, files=files)
print r.text, print r.json
ahh bedankt @LukasGraf nu begrijp ik beter wat zijn originele code doet
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?
Antwoord 4, autoriteit 10%
curl -d @request.json --header "Content-Type: application/json" https://www.googleapis.com/qpxExpress/v1/trips/search?key=mykeyhere
de implementatie van python is als
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)
vink deze linkaan, het helpt om cURl te converteren commando naar python,php en nodejs
Antwoord 5, autoriteit 5%
Mijn antwoord is 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
Mijn excuses voor het niet verstrekken van de vereiste parameters, want het is vertrouwelijk.
Antwoord 6, autoriteit 2%
Ik gebruik de bibliotheek os
.
import os
os.system("sh script.sh")
script.sh
bevat letterlijk alleen de krul.
Antwoord 7
PYTHON 3
Werkt alleen binnen UNIX (Linux / Mac) (!)
Een cURL uitvoeren met Python 3 en de JSON-gegevens ontleden.
import shlex
import json
import subprocess
# Make sure that cURL has Silent mode (--silent) activated
# otherwise we receive progress data inside err message later
cURL = r"""curl -X --silent POST http://www.test.testtestest/ -d 'username=test'"""
lCmd = shlex.split(cURL) # Splits cURL into an array
p = subprocess.Popen(lCmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = p.communicate() # Get the output and the err message
json_data = json.loads(out.decode("utf-8"))
print(json_data) # Display now the data
Soms moet u ook deze afhankelijkheden op Unix installeren als u vreemde fouten ervaart:
# Dependencies
sudo apt install libcurl4-openssl-dev libssl-dev
sudo apt install curl
8
Dit kan bereiken met de onderstaande Psuedo-code-aanpak
Import OS
importverzoeken
Gegevens = os.execute (curl-url)
R = gegevens.json ()