103

我正在尝试将 API 查询放入 python 中。命令行

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

给出一些 json 输出。myToken 是一个始终保持不变的十六进制变量。我想从 python 进行这个调用,以便我可以遍历不同的 id 并分析输出。有任何想法吗?在需要身份验证之前,我已经使用 urllib2 完成了此操作。我还查看了 requests 模块,但不知道该怎么做。

非常感谢。

4

6 回答 6

153

requests包有一个非常好的用于 HTTP 请求的API,添加自定义标头的工作方式如下(来源:官方文档):

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

如果您不想使用外部依赖项,使用标准库的 urllib2 相同的东西看起来像这样(来源:缺失的手册):

>>> import urllib2
>>> response = urllib2.urlopen(
... urllib2.Request('https://website.com/id', headers={'Authorization': 'access_token myToken'})
于 2012-12-11T19:27:54.310 回答
36

尝试在 Github 中使用令牌时,我遇到了同样的问题。

在 Python 3 中对我有用的唯一语法是:

import requests

myToken = '<token>'
myUrl = '<website>'
head = {'Authorization': 'token {}'.format(myToken)}
response = requests.get(myUrl, headers=head)
于 2017-12-04T16:28:35.413 回答
16
>>> 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()
于 2020-01-21T09:02:58.430 回答
7
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
    }
  ]
}
于 2021-04-22T09:07:06.143 回答
4

你试过这个uncurl包(https://github.com/spulec/uncurl)吗?您可以通过 pip 安装它,pip install uncurl. 您的 curl 请求返回:

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

requests.get("https://website.com/id",
    headers={
        "Authorization": "access_token myToken"
    },
    cookies={},
)
于 2019-10-30T15:42:32.003 回答
2

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

header = {'PRIVATE-TOKEN': 'my_token'}
response = requests.get(myUrl, headers=header)
于 2019-10-12T05:44:01.017 回答