调用Bitbucket Cloud API认证返回401,仅获取提交信息时失败
问题原因与解决方案
- 核心错误:请求方法不匹配
Bitbucket Cloud v2 API的提交列表查询接口仅支持GET请求,你代码中使用requests.post发起请求,该方法需要更高的写入类权限,且接口本身不接受POST请求,两类接口的认证校验逻辑不同,因此会出现可正常拉取仓库列表、但拉取提交信息报401的现象。 - 潜在语法问题
你粘贴的代码中,第一个请求的auth参数里username被意外拆分为两行的use和rname,若实际运行代码存在该问题也会引发认证错误,若你可正常拉取仓库列表则可忽略该点。 - 补充权限校验
若修改请求方法后仍报错,需确认你使用的App Password已勾选repository:read权限,拉取工作区仓库列表仅需要基础的工作区读权限,单仓库提交信息读取需要额外的仓库读权限。 - 分页逻辑缺陷
原代码的while循环仅判断了分页标记next,但未发起拉取下一页数据的请求,会导致死循环,修正代码中已补充对应逻辑。
修正后核心代码片段
import requests baseUrlv2 = "https://bitbucket.org/api/2.0" role = "contributor" username = {bitbucket_username} password = {bitbucket_app_password} r = requests.get("{base}/repositories/{workspace}?role={role}".format(base=baseUrlv2, role=role), auth=(username, password)) repos = r.json() while True: for repo in repos["values"]: commitLink = repo["links"]["commits"]["href"] repoSlug = repo["slug"] # 把POST请求改为GET请求即可解决401问题 r = requests.get(commitLink, auth=(username,password)) c = r.json() # 处理分页逻辑 if 'next' not in repos: break repos = requests.get(repos['next'], auth=(username,password)).json()
内容的提问来源于stack exchange,提问作者momo
相关产品推荐
相关产品推荐

