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

问题描述 投票:0回答:8

我正在尝试在 Python 中使用 API 查询。从命令行我可以像这样使用

curl

curl --header "Authorization:access_token myToken" https://website.example/id

这会给出一些 JSON 输出。

myToken
是一个十六进制变量,始终保持不变。

我想从 python 进行此调用,以便我可以循环不同的 id 并分析输出。在需要身份验证之前,我已经使用

urllib2
完成了此操作。我还查看了
requests
模块,但不知道如何使用它进行身份验证。

python authentication curl access-token
8个回答
197
投票

requests包有一个非常好的HTTP请求API,添加自定义标头就像这样(来源:官方文档):

>>> import requests >>> response = requests.get( ... 'https://website.example/id', headers={'Authorization': 'access_token myToken'})
如果你不想使用外部依赖项,使用Python 2标准库的urllib2的同样的事情看起来像这样(

来源:官方文档):

>>> import urllib2 >>> response = urllib2.urlopen( ... urllib2.Request('https://website.example/id', headers={'Authorization': 'access_token myToken'})
对于 Python 3,只需使用 

urllib

 而不是 
urllib2

    


46
投票
我在尝试在 Github 上使用令牌时遇到了同样的问题。

对我来说 Python 3 唯一有效的语法是:

import requests myToken = '<token>' myUrl = '<website>' head = {'Authorization': 'token {}'.format(myToken)} response = requests.get(myUrl, headers=head)
    

29
投票
>>> import requests >>> response = requests.get('https://website.com/id', headers={'Authorization': 'access_token myToken'})

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

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

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

如果您使用

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
可以按如下方式使用(使用示例中的自定义 

auth_scheme):

response = requests.get( url='https://example.com', auth=TokenAuth(token='abcde', auth_scheme='access_token'), )
这可能看起来是一种更复杂的设置 

Request.headers

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


12
投票
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())

输出:

{ "plans": [ { "field": false, "description": "plan 12", "enabled": true } ] }
    

7
投票
您尝试过

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={}, )
    

3
投票
我会添加一点提示:您作为标头的键值传递的内容似乎取决于您的授权类型,在我的情况下是

PRIVATE-TOKEN



header = {'PRIVATE-TOKEN': 'my_token'} response = requests.get(myUrl, headers=header)
    

3
投票
下面是Python中用于检索的选项之一:

import requests token="abcd" < retrieved based> headers = {'Authorization': "Bearer {}".format(token)} response = requests.get( 'https://<url api>', headers=headers, verify="root ca certificate" ) print(response.content)
如果出现主机名不匹配错误,则需要使用主机名在服务器中配置其他 SAN。

希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.