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?
6 answers
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)
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?
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
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)
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.
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 ()