带身份验证的python请求(access_token)

use*_*406 55 python authentication curl access-token

我正在尝试将API查询到python中.命令行

curl --header "Authorization:access_token myToken" https://website.com/id
Run Code Online (Sandbox Code Playgroud)

给出一些json输出.myToken是一个十六进制变量,始终保持不变.我想从python进行这个调用,这样我就可以遍历不同的id并分析输出.有任何想法吗?在需要身份验证之前,我已经使用urllib2完成了这项工作.我还看了一下请求模块,但无法弄清楚如何做到这一点.

非常感谢.

小智 97

请求包有一个用于HTTP请求的一个非常好的API,加入了自定义标题是这样的(来源:官方文档):

>>> import requests
>>> response = requests.get(
... 'https://website.com/id', headers={'Authorization': 'access_token myToken'})
Run Code Online (Sandbox Code Playgroud)

如果你不想使用外部依赖,那么使用标准库的urllib2就是这样(源:缺少的手册):

>>> import urllib2
>>> response = urllib2.urlopen(
... urllib2.Request('https://website.com/id', headers={'Authorization': 'access_token myToken'})
Run Code Online (Sandbox Code Playgroud)


blo*_*tfc 19

尝试与Github一起使用令牌时遇到了同样的问题.

使用Python 3的唯一语法是:

import requests

myToken = '<token>'
myUrl = '<website>'
head = {'Authorization': 'token {}'.format(myToken)}
response = requests.get(myUrl, headers=head)
Run Code Online (Sandbox Code Playgroud)


Sow*_*agu 14

>>> import requests
>>> response = requests.get('https://website.com/id', headers={'Authorization': 'access_token myToken'})
Run Code Online (Sandbox Code Playgroud)

如果上述方法不起作用,请尝试以下操作:

>>> import requests
>>> response = requests.get('https://api.buildkite.com/v2/organizations/orgName/pipelines/pipelineName/builds/1230', headers={ 'Authorization': 'Bearer <your_token>' })
>>> print response.json()
Run Code Online (Sandbox Code Playgroud)

  • 本周我遇到了同样的问题,最终对我有用的是授权持有者选项。不知道为什么会有差异,但感谢您为我提供了尝试并成功开始工作的选项! (2认同)

djv*_*jvg 12

已经有很多好的答案,但我还没有看到这个选项:

如果您使用requests,您还可以指定自定义身份验证类,类似于HTTPBasicAuth。例如:

from requests.auth import AuthBase


class TokenAuth(AuthBase):
    def __init__(self, token, auth_scheme='Bearer'):
        self.token = token
        self.auth_scheme = auth_scheme

    def __call__(self, request):
        request.headers['Authorization'] = f'{self.auth_scheme} {self.token}'
        return request

Run Code Online (Sandbox Code Playgroud)

可以按如下方式使用(使用示例中的自定义auth_scheme ):

response = requests.get(
    url='https://example.com', 
    auth=TokenAuth(token='abcde', auth_scheme='access_token'),
)
Run Code Online (Sandbox Code Playgroud)

这可能看起来是一种更复杂的设置Request.headers属性的方法,但如果您想支持多种类型的身份验证,它可能会很有优势。请注意,这允许我们使用auth参数而不是headers参数。

  • 很有用,因为您不必手动合并标头 (2认同)

tsc*_*elz 6

您是否尝试过该uncurl软件包(https://github.com/spulec/uncurl)?您可以通过 pip 安装它pip install uncurl。您的卷曲请求返回:

>>> uncurl "curl --header \"Authorization:access_token myToken\" https://website.com/id"

requests.get("https://website.com/id",
    headers={
        "Authorization": "access_token myToken"
    },
    cookies={},
)
Run Code Online (Sandbox Code Playgroud)


Shi*_*waj 5

import requests

BASE_URL = 'http://localhost:8080/v3/getPlan'
token = "eyJhbGciOiJSUzI1NiIsImtpZCI6ImR"

headers = {'Authorization': "Bearer {}".format(token)}
auth_response = requests.get(BASE_URL, headers=headers)

print(auth_response.json())
Run Code Online (Sandbox Code Playgroud)

输出 :

{
"plans": [
    {
        "field": false,
        "description": "plan 12",
        "enabled": true
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)