Python żąda od biblioteki, jak przekazać nagłówek autoryzacji z jednym tokenem


Mam żądanie URI i token. Jeśli używam:
curl -s "<MY_URI>" -H "Authorization: TOK:<MY_TOKEN>"

i tak dalej, otrzymuję 200 i przechodzę przez odpowiednie dane JSON.
Więc skonfigurowałem żądania i kiedy próbuję uzyskać dostęp do tego zasobu, otrzymuję 403, prawdopodobnie dlatego, że nie znam poprawnej składni do przekazania tego tokena. Czy ktoś może mi pomóc to rozgryźć?
Oto co mam:
import sys,socket
import requestsr = 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 nic z tego nie działa.
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

W Pythonie:
('<MY_TOKEN>')

równoważny
'<MY_TOKEN>'

I pyta tłumaczy
('TOK', '<MY_TOKEN>')

Ponieważ chcesz, aby żądania używały podstawowego uwierzytelniania i tworzyły nagłówek autoryzacji w następujący sposób:
'VE9LOjxNWV9UT0tFTj4K'

Która jest reprezentacją base64 dla
„TOK: & < MY_TOKEN & >”
Aby przekazać swój własny nagłówek, przekazujesz go do słownika w następujący sposób:
r = requests.get('<MY_URI>', headers={'Authorization': 'TOK:<MY_TOKEN>'})
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Szukałem czegoś podobnego i trafiłem

to jest
https://requests.readthedocs.i ... n/... Wygląda na to, że w pierwszej wspomnianej opcji
<pre class="lang-py prettyprint-override">
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ć
<pre class="lang-py prettyprint-override">
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 puste, jak pokazano poniżej:
<pre class="lang-py prettyprint-override">
r=requests.get('<MY_URI', auth=('MY_USERNAME', ''))

Mam nadzieję, że to komuś pomoże :)
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

To zadziałało dla mnie:
access_token = #yourAccessTokenHere#result = requests.post(url,
headers={'Content-Type':'application/json',
'Authorization': 'Bearer {}'.format(access_token)})
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

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/')
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Żądania natywnie obsługują tylko podstawowe uwierzytelnianie przy użyciu niestandardowych parametrów przebiegu, a nie tokenów.
Jeśli chcesz, możesz dodać następującą klasę, aby żądania obsługiwały podstawowe uwierzytelnianie oparte na tokenach:
import requests
from base64 import b64encodeclass 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 zapytanie:
r = requests.get(url, auth=BasicAuthToken(api_token))

Alternatywą byłoby sformułowanie zamiast tego niestandardowego tytułu, zgodnie z sugestiami innych użytkowników.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

założyłem tutaj, to jest w porządku dla linkedin:

https://auth0.com/docs/flows/g ... -code
https://auth0.com/docs/flows/g ... -code
Więc mój kod używający login linkedin jest 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()
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Możesz spróbować czegoś takiego
r = requests.get(ENDPOINT, params=params, headers={'Authorization': 'Basic %s' % API_KEY})
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

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 niestandardowego tokena.

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się