Eu quero executar um comando curl em python.
Normalmente, só preciso digitar o comando no terminal e pressionar a tecla Enter. 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 arquivo request.json a ser enviado para obter resposta.
Eu procurei muito e fiquei confuso. Tentei escrever um pedaço de código, embora não pudesse entender completamente. Não deu certo.
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 análise'. Alguém pode me dizer como corrigi-lo? ou como obter resposta do servidor corretamente?
Respostas:
Por uma questão de simplicidade, talvez você deva considerar o uso da biblioteca de solicitações .
Um exemplo com o conteúdo da resposta json seria algo como:
Se você procurar mais informações, na seção Início Rápido , eles têm muitos exemplos úteis.
EDITAR:
Para sua tradução específica de curl:
fonte
'Accept-Charset': 'UTF-8'
Requests
é uma dependência extra que você precisa instalar e gerenciar. Para uma solução simples usando apenas a biblioteca padrão, consulte stackoverflow.com/a/13921930/111995Basta usar este site . Ele converterá qualquer comando curl em Python, Node.js, PHP, R ou Go.
Exemplo:
Torna-se isso em Python,
fonte
talvez?
se você está tentando enviar um arquivo
ahh obrigado @LukasGraf agora entendo melhor o que o código original está fazendo
fonte
requests.json
arquivo e não define oContent-Type: application/json
cabeçalho - também, isso enviará umaGET
solicitação, não aPOST
.curl -d @<file>
lerá os campos para postar<file>
- isso não é o mesmo que o upload do arquivo.data = requests.get(url).json
deve serdata = requests.get(url).json()
sua implementação python seja como
verifique este link , ele ajudará a converter o comando cURl em python, php e nodejs
fonte
Minha resposta é WRT python 2.6.2.
Peço desculpas por não fornecer os parâmetros necessários porque é confidencial.
fonte
Alguns antecedentes: procurei exatamente essa pergunta porque precisava fazer algo para recuperar o conteúdo, mas tudo o que tinha disponível era uma versão antiga do python com suporte SSL inadequado. Se você usa um MacBook antigo, sabe do que estou falando. De qualquer forma,
curl
funciona bem a partir de um shell (suspeito que tenha um suporte SSL moderno vinculado); portanto, às vezes você deseja fazer isso sem usarrequests
ouurllib2
.Você pode usar o
subprocess
módulo para executarcurl
e obter o conteúdo recuperado:O
subprocess
módulo do Python 3 também contém.run()
várias opções úteis. Vou deixar para alguém que está realmente executando o python 3 para fornecer essa resposta.fonte
Isso pode ser alcançado com a abordagem de código psuedo abaixo mencionada
Importar solicitações de importação Dados = os.execute (URL de curvatura) R = Data.json ()
fonte