Tengo un URI de solicitud y un token. Si uso:
curl -s "<MY_URI>" -H "Authorization: TOK:<MY_TOKEN>"
etc., obtengo un 200 y veo los datos JSON correspondientes. Entonces, instalé solicitudes y cuando intento acceder a este recurso obtengo un 403 probablemente porque no conozco la sintaxis correcta para pasar ese token. ¿Alguien puede ayudarme a resolverlo? Esto es lo que tengo:
import sys,socket
import requests
r = requests.get('<MY_URI>','<MY_TOKEN>')
r. status_code
Ya probé:
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>'))
Pero ninguno de estos funciona.
Estaba buscando algo similar y encontré esto . Parece que en la primera opción que mencionaste
r = requests.get('<MY_URI>', auth=('<MY_TOKEN>'))
"auth" toma dos parámetros: nombre de usuario y contraseña, por lo que la declaración real debe ser
r=requests.get('<MY_URI>', auth=('<YOUR_USERNAME>', '<YOUR_PASSWORD>'))
En mi caso, no había contraseña, así que dejé vacío el segundo parámetro en el campo de autenticación como se muestra a continuación:
r=requests.get('<MY_URI', auth=('MY_USERNAME', ''))
Espero que esto ayude a alguien :)
fuente
r = requests.get('<MY_URI>',auth=('<MY_TOKEN>'))
, obtendrásTypeError: 'str' object is not callable
. Eso me dejó perplejo por un tiempo hasta que me encontré con esto: /Esto funcionó para mí:
access_token = #yourAccessTokenHere# result = requests.post(url, headers={'Content-Type':'application/json', 'Authorization': 'Bearer {}'.format(access_token)})
fuente
También puede establecer encabezados para toda la sesión:
TOKEN = 'abcd0123' HEADERS = {'Authorization': 'token {}'.format(TOKEN)} with requests.Session() as s: s.headers.update(HEADERS) resp = s.get('http://example.com/')
fuente
Las solicitudes admiten de forma nativa la autenticación básica solo con parámetros de paso de usuario, no con tokens.
Si lo desea, puede agregar la siguiente clase para que las solicitudes admitan la autenticación básica basada en tokens:
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
Luego, para usarlo, ejecute la siguiente solicitud:
Una alternativa sería formular un encabezado personalizado en su lugar, tal como lo sugirieron otros usuarios aquí.
fuente
fundé aquí, está bien conmigo para linkedin: https://auth0.com/docs/flows/guides/auth-code/call-api-auth-code, así que mi código con LinkedIn inicia sesión aquí:
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()
fuente
Puedes probar algo como esto
r = requests.get(ENDPOINT, params=params, headers={'Authorization': 'Basic %s' % API_KEY})
fuente
Esto funcionó para mí:
r = requests.get('http://127.0.0.1:8000/api/ray/musics/', headers={'Authorization': 'Token 22ec0cc4207ebead1f51dea06ff149342082b190'})
Mi código usa un token generado por el usuario.
fuente