119 votes

CURL alternative en Python

J'ai un appel cURL que j'utilise en PHP:

curl -i -H 'Accepter: application / xml' -u login: clé "https://app.streamsend.com/emails"

J'ai besoin d'un moyen de faire la même chose en Python. Existe-t-il une alternative à cURL en Python? Je connais urllib mais je suis un noob Python et je ne sais pas comment l'utiliser.

136voto

Gudbergur Points 759

Vous pouvez utiliser les requêtes HTTP décrites dans le guide de l'utilisateur Requests: HTTP for Humans .

68voto

blwy10 Points 2858
 import urllib2

manager = urllib2.HTTPPasswordMgrWithDefaultRealm()
manager.add_password(None, 'https://app.streamsend.com/emails', 'login', 'key')
handler = urllib2.HTTPBasicAuthHandler(manager)

director = urllib2.OpenerDirector()
director.add_handler(handler)

req = urllib2.Request('https://app.streamsend.com/emails', headers = {'Accept' : 'application/xml'})

result = director.open(req)
# result.read() will contain the data
# result.info() will contain the HTTP headers

# To get say the content-length header
length = result.info()['Content-Length']
 

Votre appel cURL utilisant urllib2 à la place. Complètement non testé.

36voto

braitsch Points 3353

Voici un exemple simple utilisant urllib2 qui ne l'authentification de base contre le GitHub de l'API.

import urllib2

u='username'
p='userpass'
url='https://api.github.com/users/username'

# simple wrapper function to encode the username & pass
def encodeUserData(user, password):
    return "Basic " + (user + ":" + password).encode("base64").rstrip()

# create the request object and set some headers
req = urllib2.Request(url)
req.add_header('Accept', 'application/json')
req.add_header("Content-type", "application/x-www-form-urlencoded")
req.add_header('Authorization', encodeUserData(u, p))
# make the request and print the results
res = urllib2.urlopen(req)
print res.read()

En outre, si vous mettez cela dans un script et l'exécuter à partir d'un terminal, vous pouvez diriger la chaîne de réponse à " mjson.outil " pour activer jolie impression.

>> basicAuth.py | python -mjson.tool

Une dernière chose à noter, urllib2 prend uniquement en charge les OBTENIR & requêtes POST.
Si vous avez besoin d'utiliser d'autres verbes comme SUPPRIMER, METTRE, etc vous aurez probablement envie de prendre un coup d'oeil à PYCURL

20voto

unholysampler Points 9454

Si vous utilisez une commande pour simplement appeler curl de cette manière, vous pouvez faire la même chose en Python avec subprocess . Exemple:

 subprocess.call(['curl', '-i', '-H', '"Accept: application/xml"', '-u', 'login:key', '"https://app.streamsend.com/emails"'])
 

Ou vous pouvez essayer PycURL si vous voulez l'avoir comme une API plus structurée comme celle de PHP.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X