Je veux exécuter une commande curl en python.
Habituellement, je dois juste entrer la commande dans le terminal et appuyer sur la touche Retour. Cependant, je ne sais pas comment cela fonctionne en python.
La commande montre ci-dessous:
curl -d @request.json --header "Content-Type: application/json" https://www.googleapis.com/qpxExpress/v1/trips/search?key=mykeyhere
Un fichier request.json doit être envoyé pour obtenir une réponse.
J'ai beaucoup cherché et je me suis perdu. J'ai essayé d'écrire un morceau de code, bien que je ne comprenais pas bien. Ça n'a pas marché.
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()
Le message d'erreur est 'Parse Error'. Est-ce que quelqu'un peut me dire comment résoudre ce problème? ou comment obtenir une réponse du serveur correctement?
Par souci de simplicité, vous devriez peut-être envisager d'utiliser la bibliothèque Requests .
Un exemple avec le contenu de réponse json serait quelque chose comme:
import requests
r = requests.get('https://github.com/timeline.json')
r.json()
Si vous recherchez des informations supplémentaires, dans la section Quickstart , ils contiennent de nombreux exemples de travail.
EDIT:
Pour votre traduction curl spécifique:
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)
Il suffit d'utiliser ce site . Il convertira n'importe quelle commande curl en Python, Node.js, PHP, R ou Go.
Exemple:
curl -X POST -H 'Content-type: application/json' --data '{"text":"Hello, World!"}' https://hooks.slack.com/services/asdfasdfasdf
Devient ceci en 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)
import requests
url = "https://www.googleapis.com/qpxExpress/v1/trips/search?key=mykeyhere"
data = requests.get(url).json
peut être?
si vous essayez d'envoyer un fichier
files = {'request_file': open('request.json', 'rb')}
r = requests.post(url, files=files)
print r.text, print r.json
ahh merci @LukasGraf maintenant je comprends mieux ce que fait son code original
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
son implémentation python soit comme
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)
check ce lien, cela aidera à convertir la commande cURl en python, php et nodejs
Il existe un site Web de Nice https://curl.trillworks.com/ qui effectue la conversion à votre place. Il convertit cURL en Python, Node.js, R, PHP, Go.
Ma réponse est 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
Je m'excuse de ne pas fournir les paramètres requis car c'est confidentiel.
Un peu d’arrière-plan: j’ai cherché précisément cette question parce que je devais faire quelque chose pour récupérer du contenu, mais tout ce dont je disposais, c’était une ancienne version de python avec un support SSL insuffisant. Si vous utilisez un ancien MacBook, vous savez de quoi je parle. Dans tous les cas, curl
fonctionne correctement à partir d'un shell (je suppose qu'il est lié au support SSL moderne), aussi vous voulez parfois le faire sans utiliser requests
ou urllib2
.
Vous pouvez utiliser le module subprocess
pour exécuter curl
et obtenir le contenu récupéré:
import subprocess
// 'response' contains a []byte with the retrieved content.
// use '-s' to keep curl quiet while it does its job, but
// it's 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])
Le module subprocess
de Python 3 contient également .run()
avec un certain nombre d'options utiles. Je laisse le soin à quelqu'un qui exécute en fait python 3 de fournir cette réponse.
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)