web-dev-qa-db-ja.com

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

しかし、これらはどれも機能しません。

63
user1552586

Pythonの場合:

('<MY_TOKEN>')

に等しい

'<MY_TOKEN>'

リクエストの解釈

('TOK', '<MY_TOKEN>')

リクエストで基本認証を使用し、次のように承認ヘッダーを作成するには:

'VE9LOjxNWV9UT0tFTj4K'

'TOK:<MY_TOKEN>'のbase64表現はどれですか

独自のヘッダーを渡すには、次のような辞書を渡します。

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

私は似たようなものを探していましたが this に出会いました。あなたが言及した最初のオプションのように見えます

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

「auth」は、ユーザー名とパスワードの2つのパラメーターを取るため、実際のステートメントは

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

私の場合、パスワードはなかったので、次に示すように、authフィールドの2番目のパラメーターを空のままにしました。

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

これが誰かを助けることを願っています:)

26
BajajG

これは私のために働いた:

access_token = #yourAccessTokenHere#

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

セッション全体にヘッダーを設定することもできます。

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

with requests.Session() as s:

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

このようなものを試すことができます

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

リクエストは、トークンではなく、ユーザーパスパラメーターでのみ基本認証をネイティブにサポートします。

必要に応じて、次のクラスを追加して、リクエストにトークンベースの基本認証をサポートさせることができます。

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

ここで他のユーザーが提案したように、代わりにカスタムヘッダーを作成することもできます。

0
Amit Blum