J'ai un URI de requête et un jeton. Si j'utilise:
curl -s "<MY_URI>" -H "Authorization: TOK:<MY_TOKEN>"
etc., j’obtiens un 200 et j’affiche les données JSON correspondantes . Alors, j’ai installé les requêtes et lorsque j’essaie d’accéder à cette ressource j’obtiens un 403 probablement parce que je ne connais pas la syntaxe correcte pour transmettre ce jeton. Quelqu'un peut-il m'aider à comprendre? Voici ce que j'ai:
import sys,socket
import requests
r = requests.get('<MY_URI>','<MY_TOKEN>')
r. status_code
J'ai déjà essayé:
r = requests.get('<MY_URI>',auth=('<MY_TOKEN>'))
r = requests.get('<MY_URI>',auth=('TOK','<MY_TOKEN>'))
r = requests.get('<MY_URI>',headers=('Authorization: TOK:<MY_TOKEN>'))
Mais aucun de ces travaux.
En python:
('<MY_TOKEN>')
est équivalent à
'<MY_TOKEN>'
Et demande interprète
('TOK', '<MY_TOKEN>')
Lorsque vous souhaitez que les demandes utilisent l'authentification de base et construisent un en-tête d'autorisation, procédez comme suit:
'VE9LOjxNWV9UT0tFTj4K'
Quelle est la représentation en base64 de 'TOK:<MY_TOKEN>'
Pour passer votre propre en-tête, vous passez dans un dictionnaire comme ceci:
r = requests.get('<MY_URI>', headers={'Authorization': 'TOK:<MY_TOKEN>'})
Je cherchais quelque chose de similaire et suis tombé sur ça . Cela ressemble à la première option que vous avez mentionnée
r = requests.get('<MY_URI>',auth=('<MY_TOKEN>'))
"auth" prend deux paramètres: nom d'utilisateur et mot de passe, ainsi la déclaration devrait être
r=requests.get('<MY_URI>',auth=('<YOUR_USERNAME>','<YOUR_PASSWORD>')
Dans mon cas, il n'y avait pas de mot de passe, j'ai donc laissé le second paramètre du champ auth vide comme indiqué ci-dessous:
r=requests.get('<MY_URI',auth=('MY_USERNAME',''))
J'espère que ça aide quelqu'un :)
Cela a fonctionné pour moi:
access_token = #yourAccessTokenHere#
result = requests.post(url,
headers={'Content-Type':'application/json',
'Authorization': 'Bearer {}'.format(access_token)})
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/')
Vous pouvez essayer quelque chose comme ça
r = requests.get(ENDPOINT, params=params, headers={'Authorization': 'Basic %s' % API_KEY})
Les demandes supportent nativement l'authentification de base uniquement avec les paramètres pass-user, pas avec les jetons.
Si vous le souhaitez, vous pouvez ajouter la classe suivante pour que les demandes prennent en charge l'authentification de base basée sur un jeton:
import requests
from base64 import b64encode
class BasicAuthToken(requests.auth.AuthBase):
def __init__(self, token):
self.token = token
def __call__(self, r):
authstr = 'Basic ' + b64encode(('token:' + self.token).encode('utf-8')).decode('utf-8')
r.headers['Authorization'] = authstr
return r
Ensuite, pour l'utiliser, lancez la requête suivante:
r = requests.get(url, auth=BasicAuthToken(api_token))
Une alternative serait de formuler un en-tête personnalisé à la place, comme suggéré par d'autres utilisateurs ici.