Mam identyfikator URI żądania i token. Jeśli używam:
curl -s "<MY_URI>" -H "Authorization: TOK:<MY_TOKEN>"
itd., otrzymuję 200 i wyświetlam odpowiednie dane JSON. Tak więc zainstalowałem żądania i kiedy próbuję uzyskać dostęp do tego zasobu, otrzymuję kod 403 prawdopodobnie dlatego, że nie znam prawidłowej składni do przekazania tego tokenu. Czy ktoś może mi pomóc to rozgryźć? Oto co mam:
import sys,socket
import requests
r = requests.get('<MY_URI>','<MY_TOKEN>')
r. status_code
Już próbowałem:
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>'))
Ale żadna z tych rzeczy nie działa.
Szukałem czegoś podobnego i trafiłem na to . Wygląda na to, że w pierwszej wspomnianej opcji
r = requests.get('<MY_URI>', auth=('<MY_TOKEN>'))
„auth” przyjmuje dwa parametry: nazwę użytkownika i hasło, więc właściwa instrukcja powinna być
r=requests.get('<MY_URI>', auth=('<YOUR_USERNAME>', '<YOUR_PASSWORD>'))
W moim przypadku nie było hasła, więc zostawiłem drugi parametr w polu auth pusty, jak pokazano poniżej:
r=requests.get('<MY_URI', auth=('MY_USERNAME', ''))
Mam nadzieję, że to komuś pomoże :)
źródło
r = requests.get('<MY_URI>',auth=('<MY_TOKEN>'))
, otrzymaszTypeError: 'str' object is not callable
. to mnieTo zadziałało dla mnie:
access_token = #yourAccessTokenHere# result = requests.post(url, headers={'Content-Type':'application/json', 'Authorization': 'Bearer {}'.format(access_token)})
źródło
Możesz także ustawić nagłówki dla całej sesji:
TOKEN = 'abcd0123' HEADERS = {'Authorization': 'token {}'.format(TOKEN)} with requests.Session() as s: s.headers.update(HEADERS) resp = s.get('http://example.com/')
źródło
Żądania natywnie obsługują podstawowe uwierzytelnianie tylko z parametrami przepustki użytkownika, a nie z tokenami.
Jeśli chcesz, możesz dodać następującą klasę, aby żądania obsługiwały uwierzytelnianie podstawowe oparte na tokenach:
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
Następnie, aby go użyć, uruchom następujące żądanie:
Alternatywą byłoby sformułowanie zamiast tego niestandardowego nagłówka, tak jak sugerowali inni użytkownicy tutaj.
źródło
założyłem tutaj, jest ze mną ok dla linkedin: https://auth0.com/docs/flows/guides/auth-code/call-api-auth-code, więc mój kod z loginem linkedin tutaj:
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()
źródło
Możesz spróbować czegoś takiego
r = requests.get(ENDPOINT, params=params, headers={'Authorization': 'Basic %s' % API_KEY})
źródło
To zadziałało dla mnie:
r = requests.get('http://127.0.0.1:8000/api/ray/musics/', headers={'Authorization': 'Token 22ec0cc4207ebead1f51dea06ff149342082b190'})
Mój kod używa tokena wygenerowanego przez użytkownika.
źródło