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

如何用Python Requests向Dependency-Track API上传SBOM文件?

解决Dependency-Track SBOM上传500内部服务器错误问题

问题根源

你的Python代码手动指定了Content-Type: multipart/form-data,但requests库处理多部分表单数据时,会自动生成包含正确boundary的Content-Type头。手动设置该头会导致服务器无法正确解析请求体,进而触发500错误。此外,最初的写法将文件字段混入data参数,不符合requests的多部分表单提交规范。

修正后的代码

from pathlib import Path
import requests

def upload_bom(file_path, project_uuid, project_version):
    url = "https://dtrack.example.com/api/v1/bom"
    headers = {
        "Accept": "application/json",
        "X-Api-Key": "my_token"
        # 移除手动设置的Content-Type,让requests自动生成
    }
    # 表单文本字段放在data参数中
    data = {
        "project": project_uuid,
        "projectVersion": project_version
    }
    # 文件字段单独放在files参数中,同时传递文件名(与curl行为保持一致)
    file_name = Path(file_path).name
    with open(file_path, "rb") as bom_file:
        files = {"bom": (file_name, bom_file)}
        response = requests.post(url, headers=headers, data=data, files=files)
    
    return [response.status_code, response.content]

关键改动说明

  • 移除手动Content-Type头:requests检测到files参数时,会自动生成带正确boundary的multipart/form-data头,这是服务器能正确解析请求的核心前提。
  • 分离data和files参数:表单文本字段(project、projectVersion)放入data,文件字段放入files,完全遵循HTTP多部分表单提交规范。
  • 保留文件名:通过(file_name, bom_file)格式传递文件,和curl中@alpine.json的行为一致,确保服务器能识别SBOM文件类型(部分场景下服务器依赖文件名后缀判断格式)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 15:45:30