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