Tenho um URI de solicitação e um token. Se eu usar:
curl -s "<MY_URI>" -H "Authorization: TOK:<MY_TOKEN>"
etc., recebo 200 e vejo os dados JSON correspondentes. Então, eu instalei as requisições e quando tento acessar este recurso recebo um 403 provavelmente porque não conheço a sintaxe correta para passar esse token. Alguém pode me ajudar a descobrir? Isso é o que eu tenho:
import sys,socket
import requests
r = requests.get('<MY_URI>','<MY_TOKEN>')
r. status_code
Ja tentei:
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>'))
Mas nada disso funciona.
Eu estava procurando por algo semelhante e me deparei com isso . Parece que na primeira opção que você mencionou
r = requests.get('<MY_URI>', auth=('<MY_TOKEN>'))
"auth" leva dois parâmetros: nome de usuário e senha, então a declaração real deve ser
r=requests.get('<MY_URI>', auth=('<YOUR_USERNAME>', '<YOUR_PASSWORD>'))
No meu caso, não havia senha, então deixei o segundo parâmetro no campo auth vazio, conforme mostrado abaixo:
r=requests.get('<MY_URI', auth=('MY_USERNAME', ''))
Espero que isso ajude alguém :)
fonte
r = requests.get('<MY_URI>',auth=('<MY_TOKEN>'))
, você conseguiráTypeError: 'str' object is not callable
. isso me deixou perplexo por um tempo até que me deparei com isso: /Isso funcionou para mim:
access_token = #yourAccessTokenHere# result = requests.post(url, headers={'Content-Type':'application/json', 'Authorization': 'Bearer {}'.format(access_token)})
fonte
Você também pode definir cabeçalhos para toda a sessão:
TOKEN = 'abcd0123' HEADERS = {'Authorization': 'token {}'.format(TOKEN)} with requests.Session() as s: s.headers.update(HEADERS) resp = s.get('http://example.com/')
fonte
As solicitações oferecem suporte nativo à autenticação básica apenas com parâmetros de passagem de usuário, não com tokens.
Você poderia, se quisesse, adicionar a seguinte classe para que as solicitações suportassem a autenticação básica baseada em 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
Então, para usá-lo, execute a seguinte solicitação:
Uma alternativa seria formular um cabeçalho personalizado, como foi sugerido por outros usuários aqui.
fonte
Eu fundei aqui, está tudo bem comigo para o linkedin: https://auth0.com/docs/flows/guides/auth-code/call-api-auth-code, então meu código com o login do linkedin aqui:
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()
fonte
Você pode tentar algo assim
r = requests.get(ENDPOINT, params=params, headers={'Authorization': 'Basic %s' % API_KEY})
fonte
Isso funcionou para mim:
r = requests.get('http://127.0.0.1:8000/api/ray/musics/', headers={'Authorization': 'Token 22ec0cc4207ebead1f51dea06ff149342082b190'})
Meu código usa token gerado pelo usuário.
fonte