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

使用pycurl发送multipart/form-data文件POST请求时遇400错误

解决pycurl上传multipart/form-data返回400 Bad Request的问题

你的代码里有几个关键问题导致了400错误,调整后就能正常工作:

  • 移除手动设置的Content-Type头:当使用pycurl的HTTPPOST选项处理文件上传时,pycurl会自动生成包含正确boundary的multipart/form-data请求头。手动设置这个头会覆盖自动生成的内容,导致服务器无法解析请求体。
  • 删除POSTFIELDSIZE设置:这个选项是用来指定POST数据的固定长度,但使用HTTPPOST处理多表单数据时完全不需要,反而会干扰请求的正确构建。
  • 修正文件路径:Windows系统下的路径反斜杠需要转义(用双反斜杠),或者使用原始字符串(在路径前加r),避免转义字符引发的路径解析错误。

修改后的代码如下:

import pycurl

url = "https://media.smsgupshup.com/GatewayAPI/rest"
c = pycurl.Curl()
c.setopt(pycurl.POST, 1)
c.setopt(pycurl.URL, url)

c.setopt(pycurl.USERPWD, "AdminUserName:AdminPassword")
c.setopt(pycurl.VERBOSE, 1)

# 修正路径为原始字符串,避免转义问题
c.setopt(c.HTTPPOST, [
    ('fileupload', (
        c.FORM_FILE, r"C:\Users\Downloads\Test.jpg",
        c.FORM_FILENAME, 'Test.jpg',
    )),
])

try:
    c.perform()
    print('Status: %d' % c.getinfo(c.RESPONSE_CODE))
    print('Time: %f' % c.getinfo(c.TOTAL_TIME))
finally:
    c.close()

另外,如果API还要求其他必填的表单字段(比如接口密钥、操作类型等),需要在HTTPPOST的列表中添加对应的键值对,比如:

c.setopt(c.HTTPPOST, [
    ('fileupload', (
        c.FORM_FILE, r"C:\Users\Downloads\Test.jpg",
        c.FORM_FILENAME, 'Test.jpg',
    )),
    ('api_key', 'your_api_key_here'),
    ('action', 'upload')
])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 23:32:37