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