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

Curl可正常运行但Requests调用失败,求Bitbucket下载解决方案

解决Requests下载Bitbucket文件时的401未授权问题

首先咱们拆解下你遇到的问题:你的curl命令能正常下载,但Requests代码返回401,核心是两个关键细节没处理对:

问题1:多余的Content-Type请求头

你给GET请求加了headers={'Content-Type': 'application/json'},但这是下载文件的请求,完全不需要这个头。Bitbucket服务器收到这个不符合场景的请求头后,可能直接拒绝认证,返回401——而curl默认不会发送这类多余头,所以能正常工作。

问题2:跨域名重定向的认证逻辑(次要但需注意)

Requests默认只会把Basic Auth信息传递给同一域名的重定向目标。当Bitbucket把请求重定向到S3存储域名时,Requests不会自动带原认证信息,但好在Bitbucket返回的S3临时下载链接本身不需要认证,只要初始请求的认证正确,后续重定向就能正常完成。


修正后的Requests代码

import requests

# 注意:确保这个URL和你curl命令里的完全一致(你原来的curl用的是api.bitbucket.org的2.0链接,要对应上)
url = "https://api.bitbucket.org/2.0/repositories/EEEE/AAA/downloads/zip.zip"
src = r"C:\1\1\SR131.zip"

# 去掉多余的Content-Type头,用with语句自动管理文件更安全
respo = requests.get(
    url,
    stream=True,
    verify=False,
    auth=('你的用户名', '你的密码或Bitbucket App密码'),
    allow_redirects=True  # 显式开启重定向,默认是True,写出来更清晰
)

if respo.status_code == requests.codes.ok:
    with open(src, "wb") as out:
        for block in respo.iter_content(1024):
            if not block:
                break
            out.write(block)
    print("文件下载成功!")
else:
    print(f"无法下载文件:URL={url},状态码={respo.status_code},响应内容={respo.content.decode('utf-8')}")

额外注意事项

  1. URL一致性:你原来的curl用的是api.bitbucket.org的2.0接口,但Requests代码里写的是bitbucket.org的用户仓库链接,这两个可能不是同一个资源,一定要确保URL完全匹配。
  2. Bitbucket认证建议:如果是Bitbucket Cloud,优先用App密码代替账号密码,它能更精细地控制权限,避免泄露主账号密码。
  3. SSL验证:verify=False会跳过SSL证书验证,生产环境里不安全,建议配置正确的CA证书后去掉这个参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:54:34