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

Pythonの場合:

('<MY_TOKEN>')

と同等です

'<MY_TOKEN>'

そしてリクエストは解釈します

('TOK', '<MY_TOKEN>')

リクエストで基本認証を使用し、次のような認証ヘッダーを作成する必要がある場合:

'VE9LOjxNWV9UT0tFTj4K'

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

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

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

トレースバック(最後の最後の呼び出し):ファイル "<stdin>"、1行目<モジュール>ファイル "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/requests/api .py "、55行目、get return request( 'get'、url、** kwargs)ファイル" /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行目、リクエストprep = self.prepare_request(req)

@rebHeliumあなたはそれを要点できますか?これはスタックトレース全体ではなく、実際に何を試したかを示すものでもありません。
イアンステープルトンコルダスコ2013

申し訳ありませんが、StackOverflowでは出力全体を投稿できませんでした。私はあなたが提案したとおりに行いました:r = requests.get( 'whatever url i have'、headers = {'Authorization': 'TOK:whatever token i have'})

謝る必要はありません。それは機能しましたか?あなたは私の答えを受け入れましたが、それはあなたに例外を引き起こしたようです。あなたが要点を作成するならば、私はここで会話をするよりもはるかに簡単にあなたを助けることができます。
イアンステープルトンコルダスコ2013

シグマ、私は実際にエラーの原因となったコードの1つの小さな詳細を見逃しました。実際のコードは機密情報であるため、要点を説明することはできません。ただし、Pythonのスキルを向上させたいので、見たい場合は追加の質問を投稿します。それらは非常に単純な質問です。きっとご存知でしょう。

37

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

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

これが誰かに役立つことを願っています:)


3
試してみるとr = requests.get('<MY_URI>',auth=('<MY_TOKEN>'))、が得られTypeError: 'str' object is not callableます。私がこれに出くわすまで、それはしばらくの間私を困惑させました:/
aydow 2017

あなたの答えは私を助けましたが、あなたが提供したリンクを読んだ後でのみ、あなたはそれに同意しました。requests.authからのHTTPBasicAuthインポートを使用すると、非常に簡単になります。
wallem 8919

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

私はここで設立しました。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()

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.