como usar o python para executar um comando curl

quero executar um comando de curva em python.

Normalmente, só preciso de introduzir o comando no terminal e carregar na tecla return. No entanto, não sei como funciona em python.

o comando mostra abaixo:

curl -d @request.json --header "Content-Type: application/json" https://www.googleapis.com/qpxExpress/v1/trips/search?key=mykeyhere
Há um pedido.ficheiro json a ser enviado para obter resposta.

Procurei muito e fiquei confuso. Eu tentei escrever um pedaço de código, embora eu não pudesse entender totalmente. Não resultou.

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

a mensagem de erro é 'erro de processamento'.Alguém pode diz - me como resolver isto? ou como obter a resposta do sever corretamente?

 65
Author: Yu Hao, 2014-08-25

6 answers

Por uma questão de simplicidade, talvez devesses pensar em usar a biblioteca padrão. pedidos .

Um exemplo com o conteúdo de resposta json seria algo como:

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

Se procurar mais informações, na secçãode arranque rápido , eles têm muitos exemplos de trabalho.

Editar:

Para a sua tradução específica:

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)
 99
Author: otorrillas, 2018-02-14 09:39:07
import requests
url = "https://www.googleapis.com/qpxExpress/v1/trips/search?key=mykeyhere"
data = requests.get(url).json
Talvez?

Se está a tentar enviar um ficheiro

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

Ahh thanks @LukasGraf agora eu melhor entender o que seu código original está fazendo {[[5]}

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? 
 12
Author: Joran Beasley, 2016-06-14 16:01:19
curl -d @request.json --header "Content-Type: application/json" https://www.googleapis.com/qpxExpress/v1/trips/search?key=mykeyhere

A sua implementação em python é como

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)

Verifique esta ligação, irá ajudar a converter o comando cURl para python, php e nodejs

 9
Author: cryptoKTM, 2018-05-09 06:20:24

Basta utilizar este site. Converte qualquer comando de curva em Python, nó.js, ou PHP.

Exemplo:

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

Torna-se isto em 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)
 7
Author: Kyle Bridenstine, 2018-06-05 16:02:03

A minha resposta é 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
Peço desculpa por não ter fornecido Os parâmetros necessários, porque é confidencial.
 3
Author: apoorva_bhat, 2018-07-10 02:28:23

Isto poderia ser conseguido com a abordagem abaixo mencionada do Código psuedo

Importar os pedidos de importação Data = os.executar (URL do curl) R = Data.json ()

 -2
Author: user9761315, 2018-05-09 20:49:29