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

使用Python Requests发送multipart/form-data上传证书失败求助

解决Nginx Proxy Manager API证书上传"No files were uploaded"报错问题

核心原因

Nginx Proxy Manager的/nginx/certificates/{certID}/upload端点要求严格遵循multipart/form-data格式,且每个证书字段必须以模拟文件对象的形式传递,参数名、内容包装方式稍有偏差就会触发该错误。

正确实现代码

import requests

# 替换为你的实际配置
BASE_URL = "http://你的NPM实例地址:81"
CERT_ID = "目标证书ID"
API_TOKEN = "你的API令牌"

# 字符串形式的证书内容
cert_str = "-----BEGIN CERTIFICATE-----\n...证书内容...\n-----END CERTIFICATE-----"
key_str = "-----BEGIN PRIVATE KEY-----\n...私钥内容...\n-----END PRIVATE KEY-----"
intermediate_str = "-----BEGIN CERTIFICATE-----\n...中间证书内容...\n-----END CERTIFICATE-----"

# 构造符合要求的files参数
files = {
    "certificate": ("cert.pem", cert_str, "application/x-x509-ca-cert"),
    "certificate_key": ("key.pem", key_str, "application/pkcs8"),
    "intermediate_certificate": ("chain.pem", intermediate_str, "application/x-x509-ca-cert")
}

headers = {
    "Authorization": f"Bearer {API_TOKEN}"
}

# 发送请求(注意API路径需带/api前缀)
response = requests.post(
    f"{BASE_URL}/api/nginx/certificates/{CERT_ID}/upload",
    headers=headers,
    files=files
)

# 查看结果
print(response.status_code)
print(response.json())

关键注意事项

  • 参数名必须完全匹配:必须使用certificate、certificate_key、intermediate_certificate,拼写错误直接导致服务端无法识别字段。
  • 元组格式不能省:每个字段必须是(文件名, 内容字符串, MIME类型)的三元组,文件名可任意填写但不能为空;MIME类型要对应证书类型,确保服务端正确解析。
  • API路径前缀:NPM的API接口必须加上/api前缀,遗漏会导致请求路径无效。
  • 权限验证:确保API令牌拥有修改证书的权限,权限不足会返回其他错误,但当前报错优先排查格式问题。

排查技巧

  1. 先用Postman等工具手动测试上传,确认参数格式正确后再转成Python代码。
  2. 打印requests生成的请求详情(如response.request.headers、response.request.body),检查multipart/form-data的边界和字段是否正确生成。
  3. 确认目标证书ID有效,无效ID可能引发异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 12:50:07