Hoe Python te gebruiken om een ​​curl-opdracht uit te voeren?

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.jsonbestand 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.shbevat 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 ()

Other episodes