使用Python urllib2通过个人访问令牌访问Github API

19 投票
2 回答
15934 浏览
提问于 2025-04-18 06:33

我正在使用Github的API v3,之前一切都很顺利,直到我达到了请求限制。于是我在Github的设置页面创建了一个个人访问令牌(Personal Access Token)。现在我想用这个令牌和urllib2库一起使用,代码如下:

from urllib2 import urlopen, Request

url = "https://api.github.com/users/vhf/repos"
token = "my_personal_access_token"
headers = {'Authorization:': 'token %s' % token}
#headers = {}

request = Request(url, headers=headers)
response = urlopen(request)
print(response.read())

如果我取消注释那行代码,这段代码就能正常工作(直到我每小时请求超过60次)。但是如果我按原样运行这段代码,就会出现urllib2.HTTPError: HTTP Error 401: Unauthorized的错误。

我哪里做错了呢?

2 个回答

15

我知道这个问题已经有几年了,但如果有人想用个人访问令牌来进行身份验证,同时又想使用 requests.getrequests.post 方法,你可以试试下面的方法:

request.get(url, data=data, auth=('user','{personal access token}')) 

这其实就是基本的身份验证,在requests库的文档中有说明,根据GitHub API的文档,你可以传递个人访问令牌。

根据文档:

通过OAuth令牌,你可以使用个人访问令牌或 OAuth令牌来代替你的密码。

curl -u username:token https://api.github.com/user

这种方法在你的工具只支持基本身份验证时特别有用,但你又想利用OAuth访问令牌的安全特性。

34

我不知道这个问题为什么被降级了。无论如何,我找到了解答:

from urllib2 import urlopen, Request
url = "https://api.github.com/users/vhf/repos"
token = "my_personal_access_token"

request = Request(url)
request.add_header('Authorization', 'token %s' % token)
response = urlopen(request)
print(response.read())

撰写回答