как да използваме python за изпълнение на команда curl

Искам да изпълня команда curl в python.

Обикновено просто трябва да въведа командата в терминала и да натисна клавиша return. Не знам обаче как става това в python.

Командата се показва по-долу:

curl -d @request.json --header "Content-Type: application/json" https://www.googleapis.com/qpxExpress/v1/trips/search?key=mykeyhere

Има файл request.json, който трябва да се изпрати, за да се получи отговор.

Търсих много и се обърках. Опитах се да напиша част от кода, въпреки че не успях да го разбера напълно. Не се получи.

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()

Съобщението за грешка е 'Parse Error'.Може ли някой да ми каже как да го поправя или как да получа правилно отговор от севера?

За по-голяма простота може би трябва да помислите за използване на библиотеката Requests.

Един пример със съдържание на отговора json би бил нещо подобно:

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

Ако потърсите допълнителна информация, в раздела Quickstart има много работещи примери.

ЕДИТ:

За вашия специфичен превод на curl:

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)
Коментари (9)
import requests
url = "https://www.googleapis.com/qpxExpress/v1/trips/search?key=mykeyhere"
data = requests.get(url).json

може би?

ако се опитвате да изпратите файл

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

Благодаря на @LukasGraf, сега разбирам по-добре какво прави оригиналният му код

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? 
Коментари (4)
curl -d @request.json --header "Content-Type: application/json" https://www.googleapis.com/qpxExpress/v1/trips/search?key=mykeyhere

изпълнението му на питон да бъде като

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)

проверете този линк, той ще ви помогне да конвертирате командата cURl в python,php и nodejs

Коментари (0)