web-dev-qa-db-fra.com

Authentification Base64 Python

Je suis une API et je dois utiliser une authentification Base64 de mon ID utilisateur et de mon mot de passe.

'L'ID utilisateur et le mot de passe doivent être concaténés puis encodés en Base64'

il montre ensuite l'exemple

'userid:password'

Il continue ensuite à dire "Fournir la valeur codée dans un" en-tête d'autorisation ""

'par exemple: Autorisation: BASIC {valeur encodée en Base64}'

Comment écrire ceci dans une demande api python?

z = requests.post(url, data=zdata )

Merci

25
Marcus

Vous pouvez encoder les données et faire la demande en procédant comme suit:

import requests, base64

usrPass = "userid:password"
b64Val = base64.b64encode(usrPass)
r=requests.post(api_URL, 
                headers={"Authorization": "Basic %s" % b64Val},
                data=payload)

Je ne sais pas si vous devez ajouter le mot "BASIC" dans le champ d'autorisation ou non. Si vous fournissez le lien API, ce serait plus clair.

37
Alfageme

La bibliothèque de requêtes a prise en charge de l'authentification de base et la codera automatiquement pour vous. Vous pouvez le tester en exécutant ce qui suit dans un python repl

from requests.auth import HTTPBasicAuth
r = requests.post(api_URL, auth=HTTPBasicAuth('user', 'pass'), data=payload)

Vous pouvez confirmer cet encodage en tapant ce qui suit.

r.request.headers['Authorization']

les sorties:

u'Basic c2RhZG1pbmlzdHJhdG9yOiFTRG0wMDY4'
55
Josh

Avec python3, j'ai trouvé une solution qui fonctionne pour moi:

userpass = username+":"+password
endcoded_u = base64.b64encode(userpass.encode("ascii")).decode("ascii")
headers = {"Authorization" : "Basic %s" % encoded_u} 
0
Michal Lis