comment construire la commande curl à partir du module de requêtes python?
Python demandes est un bon module pour la facilité de mon site web RESTE l'accès à l'API de programmation, j'ai l'habitude de faire comme ci-dessous
import json
url = 'https://api.github.com/some/endpoint'
payload = {'some': 'data'}
headers = {'Content-type': 'application/json', 'Accept': 'application/json'}
r = requests.post(url, data=json.dumps(payload), headers=headers)
Et quand il y a une erreur qui vient de sortir, je veux voir ce qu'il se passe derrière elle. La construction de la curl
commande à reproduire dans la ligne de commande est la façon la plus commune, puisque c'est le standard qui est le plus décrit dans le REEE de l'API document
try:
r = requests.post(url, data=json.dumps(payload), headers=headers)
except Exception as ex:
print "try to use curl command below to reproduce"
print curl_request(url,"POST",headers,payload)
Il sera agréable je peux générer curl
exemple de commande pour cette demande, voir un bon exemple dans libcloud de débogageje ne peux pas trouver un moyen simple de construire, voici la méthode que je veux créer par moi-même.
# below code is just pseudo code, not correct
def curl_request(url,method,headers,payloads):
# construct curl sample from requests' structure
# $ curl -v -H "Accept: application/json" -H "Content-type: application/json"
# -d '{"some":"data"}'
# -X POST https://api.github.com/some/endpoint
request = "curl -v "
for header in headers:
print header
request = request + '-H "' + header + ": " + headers[header] + '" '
for payload in payloads:
request = request + '-d {} "' + payload + ": " + payloads[payload] + '" '
request = request + "-X %s %s" % (method,url)
return request
Il sera aussi bien si nous avons de la méthode dans requests
déjà
Ci-dessous sont la solution finale obtenez la réponse, fonctionne pour moi. Montrons ici pour votre référence
def curl_request(url,method,headers,payloads):
# construct the curl command from request
command = "curl -v -H {headers} {data} -X {method} {uri}"
data = ""
if payloads:
payload_list = ['"{0}":"{1}"'.format(k,v) for k,v in payloads.items()]
data = " -d '{" + ", ".join(payload_list) + "}'"
header_list = ['"{0}: {1}"'.format(k, v) for k, v in headers.items()]
header = " -H ".join(header_list)
print command.format(method=method, headers=header, data=data, uri=url)
source d'informationauteur Larry Cai
Vous devez vous connecter pour publier un commentaire.
Cette méthode existait dans les demandes de once upon a time, mais c'est loin d'être à distance pertinents pour le module. Vous pouvez créer une fonction qui prend une réponse et inspecte ses
request
attribut.La
request
attribut est unPreparedRequest
objet de sorte qu'il aheaders
etbody
attributs. Le corps est ce que vous passez à friser avec-d
et les en-têtes peuvent être générés comme vous l'avez fait ci-dessus. Enfin, vous aurez envie de arrachez leurl
attribut de larequest
objet et l'envoyer. Les crochets ne sont pas importantes pour vous, sauf si vous êtes en train de faire quelque chose avec une authentification personnalisée gestionnaire.Que devrait travail. Vos données seront correctement formaté si elle est comme
multipart/form-data
ou quoi que ce soit d'autre.Vous pouvez également utiliser curlify pour ce faire.