我正在尝试将API查询导入python。命令行
curl --header "Authorization:access_token myToken" https://website.example/id
给出了一些JSON输出。myToken是一个十六进制变量,在整个过程中保持不变。我想从python中调用这个变量,这样我就可以循环通过不同的id并分析输出。在需要验证之前,我已经用urllib2完成了验证。我还看了一下requests模块,但不知道如何完成。
myToken
urllib2
requests
gudnpqoy1#
requests包为HTTP请求提供了一个非常好的API,添加自定义头的工作方式如下(源代码:官方文件):
>>> import requests >>> response = requests.get( ... 'https://website.example/id', headers={'Authorization': 'access_token myToken'})
如果你不想使用外部依赖,同样的事情使用urllib2的标准库看起来是这样的(资料来源:丢失的手册):
>>> import urllib2 >>> response = urllib2.urlopen( ... urllib2.Request('https://website.example/id', headers={'Authorization': 'access_token myToken'})
ukxgm1gy2#
我在Github中使用令牌时也遇到了同样的问题。我在Python 3中使用的唯一语法是:
import requests myToken = '<token>' myUrl = '<website>' head = {'Authorization': 'token {}'.format(myToken)} response = requests.get(myUrl, headers=head)
vfhzx4xs3#
>>> 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()
q3aa05254#
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 } ] }
zlhcx6iw5#
你试过uncurl软件包(https://github.com/spulec/uncurl)吗?你可以通过pip,pip install uncurl来安装它。你的curl请求返回:
uncurl
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={}, )
n1bvdmb66#
已经有很多好的答案了,但我还没有看到这个选项:如果使用requests,还可以指定自定义身份验证类,类似于HTTPBasicAuth。例如:
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参数。
Request.headers
auth
headers
13z8s7eq7#
我再补充一点提示:作为头的键值传递的值似乎取决于授权类型,在我的例子中是PRIVATE-TOKEN
PRIVATE-TOKEN
header = {'PRIVATE-TOKEN': 'my_token'} response = requests.get(myUrl, headers=header)
kiz8lqtg8#
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。希望这对你有帮助。
8条答案
按热度按时间gudnpqoy1#
requests包为HTTP请求提供了一个非常好的API,添加自定义头的工作方式如下(源代码:官方文件):
如果你不想使用外部依赖,同样的事情使用urllib2的标准库看起来是这样的(资料来源:丢失的手册):
ukxgm1gy2#
我在Github中使用令牌时也遇到了同样的问题。
我在Python 3中使用的唯一语法是:
vfhzx4xs3#
如果以上方法不起作用,请尝试以下方法:
q3aa05254#
输出量:
zlhcx6iw5#
你试过
uncurl
软件包(https://github.com/spulec/uncurl)吗?你可以通过pip,pip install uncurl
来安装它。你的curl请求返回:n1bvdmb66#
已经有很多好的答案了,但我还没有看到这个选项:
如果使用
requests
,还可以指定自定义身份验证类,类似于HTTPBasicAuth
。例如:这可以按如下方式使用(使用示例中的自定义auth_scheme):
这看起来像是设置
Request.headers
属性的一种更复杂的方法,但是如果你想支持多种类型的身份验证,这可能是有利的。注意,这允许我们使用auth
参数而不是headers
参数。13z8s7eq7#
我再补充一点提示:作为头的键值传递的值似乎取决于授权类型,在我的例子中是
PRIVATE-TOKEN
kiz8lqtg8#
python中使用的选项之一检索如下:
如果出现主机名不匹配错误,则需要在服务器中使用主机名配置其他SAN。
希望这对你有帮助。