You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python requests访问GitHub API遇凭证错误,求排查方案

解决GitHub API请求返回"Bad credentials"的问题

看起来你遇到的情况有点棘手——curl能正常拿到结果,但用requests写的两种方式都报了认证错误,我来帮你梳理几个关键排查点和解决办法:

1. 先确认Token的有效性与权限

这是最常见的原因,先优先排查:

  • 去GitHub的「Settings → Developer settings → Personal access tokens」里检查你的token:确保它没有过期、没有被撤销
  • 确认token拥有repo权限(如果目标仓库是私有的话),至少要有读取仓库内容的权限
  • 复制token时有没有不小心带了多余的空格或换行?可以在终端里用echo打印token,对比GitHub上的原始值是否一致

2. 调整第二种写法的Auth参数

GitHub允许用token作为Basic Auth的密码,但用户名可以是特殊值x-oauth-basic(这是GitHub推荐的无用户名认证方式),你可以修改第二种写法试试:

import requests

url = "https://api.github.com/repos/rsapkf/42/commits"
headers = {"Accept": "application/vnd.github.inertia-preview+json"}
my_token = "a0d42faabef23ab5b5462394373fc133ca107890"
# 使用x-oauth-basic作为用户名,避免用户名匹配问题
r = requests.get(url, headers=headers, auth=('x-oauth-basic', my_token))
print(r.json())

3. 验证第一种写法的Headers格式

第一种写法的Headers逻辑是对的,但可以先打印实际发送的请求头,确认没有格式错误:

import requests

url = "https://api.github.com/repos/rsapkf/42/commits"
headers = {
    "Accept": "application/vnd.github.inertia-preview+json",
    "Authorization": "token a0d42faabef23ab5b5462394373fc133ca107890"
}
# 创建Session查看预发送的请求头
s = requests.Session()
req = requests.Request('GET', url, headers=headers)
prepped = s.prepare_request(req)
# 打印Headers确认格式
print(prepped.headers)
# 发送请求
r = s.send(prepped)
print(r.json())

重点检查Authorization头:token和你的token之间必须有一个空格,且token本身没有拼写错误。

4. 排除环境干扰

如果上面都没问题,可能是你的运行环境有代理或防火墙,导致requests的请求被修改。可以试试关闭代理,或者在请求里明确禁用代理:

# 第一种写法禁用代理的示例
r = requests.get(url, headers=headers, proxies={"http": None, "https": None})

另外提个小细节:你提供的curl命令里URL是/repos/rsapkf/42/commit(单数),但requests里用的是/commits(复数)——不过这个只会导致404错误,不是认证问题,统一成复数URL就好。

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 15:37:35