我正在尝试在 Python 中使用 API 查询。从命令行我可以像这样使用
curl
:
curl --header "Authorization:access_token myToken" https://website.example/id
这会给出一些 JSON 输出。
myToken
是一个十六进制变量,始终保持不变。
我想从 python 进行此调用,以便我可以循环不同的 id 并分析输出。在需要身份验证之前,我已经使用
urllib2
完成了此操作。我还查看了 requests
模块,但不知道如何使用它进行身份验证。
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
对我来说 Python 3 唯一有效的语法是:
import requests
myToken = '<token>'
myUrl = '<website>'
head = {'Authorization': 'token {}'.format(myToken)}
response = requests.get(myUrl, headers=head)
>>> 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()
如果您使用
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
参数。
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
}
]
}
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={},
)
PRIVATE-TOKEN
header = {'PRIVATE-TOKEN': 'my_token'}
response = requests.get(myUrl, headers=header)
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。希望这有帮助。