Je veux exécuter une commande curl en python.
Habituellement, il me suffit d'entrer la commande dans le terminal et d'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
Il y a un fichier request.json à envoyer pour obtenir une réponse.
J'ai beaucoup cherché et j'étais confus. J'ai essayé d'écrire un morceau de code, même si je ne pouvais pas comprendre complètement. Ç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». Quelqu'un peut-il me dire comment y remédier? ou comment obtenir une réponse du serveur correctement?
Réponses:
Par souci de simplicité, vous devriez peut-être envisager d'utiliser la bibliothèque Requests .
Un exemple avec le contenu de la réponse json serait quelque chose comme:
Si vous recherchez plus d'informations, dans la section Démarrage rapide , ils ont de nombreux exemples fonctionnels.
ÉDITER:
Pour votre traduction curl spécifique:
la source
'Accept-Charset': 'UTF-8'
Requests
est une dépendance supplémentaire que vous devez installer et gérer. Pour une solution simple utilisant uniquement la bibliothèque standard, voir stackoverflow.com/a/13921930/111995Utilisez simplement ce site Web . Il convertira n'importe quelle commande curl en Python, Node.js, PHP, R ou Go.
Exemple:
Devient ceci en Python,
la source
peut être?
si vous essayez d'envoyer un fichier
ahh merci @LukasGraf maintenant je comprends mieux ce que fait son code original
la source
requests.json
fichier et ne définit pas l'en-Content-Type: application/json
tête - cela enverra également uneGET
demande, pas un fichierPOST
.curl -d @<file>
lira les champs à partir desquels publier<file>
- ce n'est pas la même chose que le téléchargement de fichiers.data = requests.get(url).json
devrait êtredata = requests.get(url).json()
son implémentation python ressemble à
vérifiez ce lien , cela aidera à convertir la commande cURl en python, php et nodejs
la source
Ma réponse est WRT python 2.6.2.
Je m'excuse de ne pas avoir fourni les paramètres requis parce que c'est confidentiel.
la source
Un peu de contexte: je suis allé chercher exactement cette question parce que je devais faire quelque chose pour récupérer du contenu, mais tout ce que j'avais à disposition était une ancienne version de python avec un support SSL inadéquat. Si vous utilisez un MacBook plus ancien, vous savez de quoi je parle. Dans tous les cas,
curl
fonctionne bien à partir d'un shell (je suppose qu'il a un support SSL moderne lié), donc parfois vous voulez le faire sans utiliserrequests
ouurllib2
.Vous pouvez utiliser le
subprocess
module pour exécutercurl
et accéder au contenu récupéré:Le
subprocess
module de Python 3 contient également.run()
un certain nombre d'options utiles. Je vais laisser à quelqu'un qui exécute réellement python 3 le soin de fournir cette réponse.la source
Cela pourrait être réalisé avec l'approche de code psuedo mentionnée ci-dessous
Importer les demandes d'importation OS Data = os.execute (URL curl) R = Data.json ()
la source