Подтвердить что ты не робот

Как использовать python для выполнения команды curl

Я хочу выполнить команду curl в python.

Обычно мне просто нужно ввести команду в терминале и нажать клавишу возврата. Тем не менее, я не знаю, как это работает в 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". Может кто-нибудь сказать мне, как это исправить? или как правильно получить ответ от сервера?

4b9b3361

Ответ 1

Для простоты, возможно, вам следует рассмотреть возможность использования библиотеки запросов.

Пример с содержанием ответа json будет выглядеть примерно так:

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

Если вы ищете дополнительную информацию, в разделе " Быстрый старт " у них есть много рабочих примеров.

РЕДАКТИРОВАТЬ:

Для вашего конкретного перевода 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)

Ответ 2

Просто используйте этот сайт. Он преобразует любую команду curl в Python, Node.js, PHP, R или Go.

Пример:

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

Становится это в 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)

Ответ 3

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

ahh спасибо @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

его реализация Python будет как

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

Ответ 5

Существует хороший веб-сайт https://curl.trillworks.com/, который выполняет преобразование для вас. Он конвертирует из cURL в Python, Node.js, R, PHP, Go.

Ответ 6

Мой ответ - 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

Я прошу прощения за то, что не предоставил необходимые параметры, потому что это конфиденциально.

Ответ 7

Немного предыстории: я искал именно этот вопрос, потому что мне нужно было что-то делать для извлечения контента, но все, что у меня было, - это старая версия python с неадекватной поддержкой SSL. Если вы используете старый MacBook, вы знаете, о чем я говорю. В любом случае, curl прекрасно работает из оболочки (я подозреваю, что она имеет современную поддержку SSL, связанную), поэтому иногда вы хотите сделать это без использования requests или urllib2.

Вы можете использовать модуль subprocess чтобы выполнить curl и получить найденный контент:

import subprocess

// 'response' contains a []byte with the retrieved content.
// use '-s' to keep curl quiet while it does its job, but
// it 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])

Модуль subprocess Python 3 также содержит .run() с рядом полезных опций. Я оставлю это кому-то, кто на самом деле работает Python 3, чтобы предоставить этот ответ.

Ответ 8

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)

Ответ 9

Этого можно достичь с помощью нижеприведенного подхода с использованием кода psuedo.

Импорт или импорт запросов Data = os.execute(curl URL) R = Data.json()