programing

Python은 단일 토큰으로 Authorization 헤더를 전달하는 방법을 라이브러리에 요청합니다.

lastmoon 2023. 7. 16. 17:45
반응형

Python은 단일 토큰으로 Authorization 헤더를 전달하는 방법을 라이브러리에 요청합니다.

나는 요청 URI와 토큰을 가지고 있습니다.사용하는 경우:

curl -s "<MY_URI>" -H "Authorization: TOK:<MY_TOKEN>"

등, 저는 200점을 받고 해당 JSON 데이터를 봅니다.그래서 요청을 설치했는데 이 리소스에 액세스하려고 하면 토큰을 전달할 올바른 구문을 모르기 때문에 403이 표시됩니다.누가 그걸 알아내는 것을 도와줄 수 있나요?이것이 제가 가진 것입니다.

import sys,socket
import requests

r = requests.get('<MY_URI>','<MY_TOKEN>')
r. status_code

이미 시도했습니다.

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>'))

하지만 이것들 중 아무 것도 작동하지 않습니다.

파이썬에서:

('<MY_TOKEN>')

와 동등합니다.

'<MY_TOKEN>'

그리고 통역을 요청합니다.

('TOK', '<MY_TOKEN>')

Basic Authentication(기본 인증)을 사용하여 다음과 같은 인증 헤더를 작성하도록 요청할 경우:

'VE9LOjxNWV9UT0tFTj4K'

그것은 다음의 기본 64 표현입니다.'TOK:<MY_TOKEN>'

자신의 헤더를 전달하려면 다음과 같이 사전에 전달합니다.

r = requests.get('<MY_URI>', headers={'Authorization': 'TOK:<MY_TOKEN>'})

비슷한 것을 찾다가 우연히 이것을 발견했습니다.당신이 언급한 첫 번째 옵션에서 처럼 보입니다.

r = requests.get('<MY_URI>', auth=('<MY_TOKEN>'))

"auth"는 사용자 이름과 암호의 두 가지 매개 변수를 사용하므로 실제 문은

r=requests.get('<MY_URI>', auth=('<YOUR_USERNAME>', '<YOUR_PASSWORD>'))

저의 경우, 비밀번호가 없어서 아래와 같이 auth 필드의 두 번째 매개변수를 비워두었습니다.

r=requests.get('<MY_URI', auth=('MY_USERNAME', ''))

이것이 누군가에게 도움이 되기를 바랍니다 :)

이것은 저에게 효과가 있었습니다.

access_token = #yourAccessTokenHere#

result = requests.post(url,
      headers={'Content-Type':'application/json',
               'Authorization': 'Bearer {}'.format(access_token)})

또한 전체 세션에 대한 헤더를 설정할 수 있습니다.

TOKEN = 'abcd0123'
HEADERS = {'Authorization': 'token {}'.format(TOKEN)}

with requests.Session() as s:

    s.headers.update(HEADERS)
    resp = s.get('http://example.com/')

여기서 찾았습니다. Linkedin: https://auth0.com/docs/flows/guides/auth-code/call-api-auth-code 에서 작동합니다. Linkedin 로그인에서 사용한 코드는 다음과 같습니다.

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 = requests.get(ENDPOINT, params=params, headers={'Authorization': 'Basic %s' %  API_KEY})

요청은 기본적으로 토큰이 아닌 사용자 패스 매개 변수로만 기본 인증을 지원합니다.

원하는 경우 다음 클래스를 추가하여 요청이 토큰 기반 기본 인증을 지원하도록 할 수 있습니다.

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

그런 다음 다음 요청을 실행하여 사용합니다.

r = requests.get(url, auth=BasicAuthToken(api_token))

다른 사용자가 여기서 제안한 것처럼 사용자 정의 헤더를 대신 공식화하는 것이 대안이 될 수 있습니다.

이것은 저에게 효과가 있었습니다.

r = requests.get('http://127.0.0.1:8000/api/ray/musics/', headers={'Authorization': 'Token 22ec0cc4207ebead1f51dea06ff149342082b190'})

내 코드는 사용자 생성 토큰을 사용합니다.

승인이 필요한 요청이 있습니다. 결과가 있을 수 있습니다.401.

요청이 다음과 같다고 가정합니다.

REQ ='https://api.asite.com/something/else/else'

토큰이 있습니다.

TOKEN = 'fliuzabuvdgfnsuczkncsq12454632'

다음과 같이 머리글을 작성합니다.

HEADER = {'Authorization': f'{TOKEN}'}

다음과 같이 사용합니다.

req.get(REQ, headers=HEADER)

다음과 같이 결과를 표시합니다.

req.get(COACH, headers=HEADER).json()

언급URL : https://stackoverflow.com/questions/19069701/python-requests-library-how-to-pass-authorization-header-with-single-token

반응형