Python 요청 라이브러리 단일 토큰으로 Authorization 헤더를 전달하는 방법


95

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

그러나 이들 중 어느 것도 작동하지 않습니다.

답변:


112

파이썬에서 :

('<MY_TOKEN>')

다음과 같다

'<MY_TOKEN>'

그리고 요청은

('TOK', '<MY_TOKEN>')

요청이 기본 인증을 사용하고 다음과 같은 권한 부여 헤더를 만들고 싶을 때 :

'VE9LOjxNWV9UT0tFTj4K'

base64 표현은 'TOK:<MY_TOKEN>'

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

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

역 추적 (최근 호출 마지막) : 파일 "<stdin>", 줄 1, <module> 파일 "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/requests/api .py ", 55 행, get return request ( 'get', url, ** kwargs) File"/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/requests/api .py ", 44 행, 요청에서 session.request (method = method, url = url, ** kwargs) 파일"/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages를 반환합니다. /requests/sessions.py ", 323 행, 요청 준비 = self.prepare_request (req)

@rebHelium 당신은 그것을 요점 수 있습니까? 이는 전체 스택 추적이 아니며 실제로 시도한 내용이 표시되지 않습니다.
Ian Stapleton Cordasco 2013 년

죄송합니다. Stack Overflow로 인해 전체 출력을 게시 할 수 없습니다. 나는 당신이 제안한대로 정확히했다 : r = requests.get ( 'whatever url i have', headers = { 'Authorization': 'TOK : whatever token i have'})

사과 할 필요가 없습니다. 작동 했나요? 내 대답을 수락했지만 예외가 발생한 것 같습니다. 요점 을 작성하면 여기서 대화를 나누는 것보다 훨씬 쉽게 도움을 드릴 수 있습니다.
Ian Stapleton Cordasco 2013 년

시그마, 오류를 일으킨 코드에 대한 작은 세부 사항이 실제로 누락되었습니다. 실제 코드는 기밀이므로 요점은 없습니다. 하지만보고 싶다면 Python 기술을 향상시키고 싶기 때문에 추가 질문을 게시 할 것입니다. 그것들은 당신이 알 것이라고 확신하는 매우 간단한 질문입니다.

37

나는 비슷한 것을 찾고 있었고 이것을 발견 했습니다 . 말씀하신 첫 번째 옵션과 같습니다.

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

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

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

제 경우에는 비밀번호가 없었기 때문에 아래와 같이 인증 필드의 두 번째 매개 변수를 비워 두었습니다.

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

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


3
시도 r = requests.get('<MY_URI>',auth=('<MY_TOKEN>'))하면 얻을 수 TypeError: 'str' object is not callable있습니다. 나는 이것을 발견 할 때까지 잠시 나를 당황하게했다 : /
aydow aydow

귀하의 답변은 나를 도왔지만 귀하가 제공하는 링크를 읽은 후에야 귀하가 accros로 왔습니다. requests.auth에서 HTTPBasicAuth 가져 오기로 작업하면 매우 쉽게 할 수 있습니다!
Wallem89

26

이것은 나를 위해 일했습니다.

access_token = #yourAccessTokenHere#

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

16

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

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

with requests.Session() as s:

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

4

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

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

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

대안은 여기에서 다른 사용자가 제안한대로 대신 사용자 지정 헤더를 공식화하는 것입니다.


3

내가 링크드 인 나와 함께 여기의 확인을 설립 : https://auth0.com/docs/flows/guides/auth-code/call-api-auth-code 그래서 여기에 로그인을 링크드 인에 내 코드 :

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

2

이런 식으로 시도해 볼 수 있습니다.

r = requests.get(ENDPOINT, params=params, headers={'Authorization': 'Basic %s' %  API_KEY})

0

이것은 나를 위해 일했습니다.

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.