BitBucket API获取工作区仓库列表请求失败,求解决及Python方案
解决BitBucket免费版Basic认证获取仓库列表的问题
错误原因
你当前的Basic认证格式有误,BitBucket的Basic认证要求将你的BitBucket用户名和应用密码用冒号(:)拼接后进行Base64编码,再放到Authorization: Basic头部后,而非直接填入应用密码。
正确的curl命令
方式1:手动生成编码串
先在终端生成符合要求的Base64编码:
- Linux/macOS终端:
echo -n "你的BitBucket用户名:你的应用密码" | base64
- Windows PowerShell:
[Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("你的BitBucket用户名:你的应用密码"))
再替换到curl命令中:
curl --request GET \ --url 'https://api.bitbucket.org/2.0/repositories/{workspace}' \ --header 'Authorization: Basic 生成的Base64编码串' \ --header 'Accept: application/json'
方式2:让curl自动处理认证(更简便)
直接用--user参数,curl会自动生成正确的Authorization头部:
curl --request GET \ --url 'https://api.bitbucket.org/2.0/repositories/{workspace}' \ --user '你的BitBucket用户名:你的应用密码' \ --header 'Accept: application/json'
Python实现方式
使用requests库完成请求,核心是传入用户名和应用密码的认证组合:
import requests # 替换为你的信息 workspace = "你的工作区名称" username = "你的BitBucket用户名" app_password = "你的应用密码" url = f"https://api.bitbucket.org/2.0/repositories/{workspace}" response = requests.get(url, auth=(username, app_password), headers={"Accept": "application/json"}) if response.status_code == 200: repo_list = response.json().get("values", []) for repo in repo_list: print(f"仓库名:{repo['name']},仓库地址:{repo['links']['html']['href']}") else: print(f"请求失败,状态码:{response.status_code},错误信息:{response.text}")
额外注意
创建应用密码时,必须勾选Repositories分类下的Read权限,否则会出现权限不足的错误。
内容的提问来源于stack exchange,提问作者devopsengineer
相关产品推荐
相关产品推荐

