152 votes

Bibliothèque de demandes Python comment passer l'en-tête d'autorisation avec un seul jeton

J'ai une URI de requête et un jeton. Si j'utilise :

curl -s "" -H "Authorization: TOK:"

etc., je reçois un code 200 et affiche les données JSON correspondantes. Donc, j'ai installé requests et quand j'essaie d'accéder à cette ressource je reçois un code 403 probablement parce que je ne connais pas la syntaxe correcte pour passer ce jeton. Est-ce que quelqu'un peut m'aider à le comprendre ? Voici ce que j'ai :

import sys,socket
import requests

r = requests.get('','')
r. status_code

J'ai déjà essayé :

r = requests.get('',auth=(''))
r = requests.get('',auth=('TOK',''))
r = requests.get('',headers=('Authorization: TOK:'))

Mais aucun de ces exemples ne fonctionnent.

154voto

sigmavirus24 Points 4768

En python:

('')

est équivalent à

''

Et requests interprète

('TOK', '')

Comme si vous vouliez que requests utilise une authentification de base et crée un en-tête d'autorisation de la manière suivante:

'VE9LOjxNWV9UT0tFTj4K'

Qui est la représentation Base64 de 'TOK:'

Pour passer votre propre en-tête, vous passez un dictionnaire de la manière suivante:

r = requests.get('', headers={'Authorization': 'TOK:'})

61voto

BajajG Points 1838

J'étais à la recherche de quelque chose de similaire et suis tombé sur ceci. Il semble que dans la première option que vous avez mentionnée

r = requests.get('', auth=(''))

"auth" prend deux paramètres : nom d'utilisateur et mot de passe, donc l'instruction réelle devrait être

r=requests.get('', auth=('', ''))

Dans mon cas, je n'avais pas de mot de passe, donc j'ai laissé le deuxième paramètre dans le champ auth vide comme indiqué ci-dessous :

r=requests.get('

`

J'espère que cela aidera quelqu'un :)

`

52voto

anotherNoob Points 370

Cela a fonctionné pour moi :

access_token = #votreAccessTokenIci#

result = requests.post(url,
      headers={'Content-Type':'application/json',
               'Authorization': 'Bearer {}'.format(access_token)})

26voto

Anton Points 732

Vous pouvez également définir des en-têtes pour toute la session :

TOKEN = 'abcd0123'
HEADERS = {'Authorization': 'token {}'.format(TOKEN)}

with requests.Session() as s:

    s.headers.update(HEADERS)
    resp = s.get('http://example.com/')

9voto

Tri Tran Points 81

J'ai trouvé cela ici, cela fonctionne pour moi avec Linkedin : https://auth0.com/docs/flows/guides/auth-code/call-api-auth-code Le code que j'ai utilisé avec la connexion Linkedin est :

ref = 'https://api.linkedin.com/v2/me'
headers = {"content-type": "application/json; charset=UTF-8",'Authorization':'Bearer {}'.format(access_token)}
Linkedin_user_info = requests.get(ref1, headers=headers).json()

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