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

如何修复Node.js Request模块发送带图片POST请求的Content-Type问题?

解决requests发送带图片POST请求时Content-Type错误的问题

嘿,太懂这种踩坑的感觉了!当你用requests发送包含图片的POST请求时,默认用data参数传内容的话,requests会自动把Content-Type设为application/x-www-form-urlencoded,但这完全不适合传输文件——我们需要的是multipart/form-data类型,这时候得换个正确的姿势来传文件。

核心解决方案:用files参数传递图片文件

发送带文件的请求时,一定要用files参数来处理图片,而不是把文件塞进data里。requests会自动识别files参数,并将Content-Type设置为multipart/form-data,还会自动处理分隔符(boundary),不用你手动操心。

给你个完整的示例代码:

import requests

# 替换成你的API接口地址
api_url = "https://your-api-endpoint.com/upload"

# 构造files字典:键是API要求的文件字段名,值是(文件名, 二进制文件对象, 媒体类型)
with open("test_image.jpg", "rb") as img_file:
    files = {
        "image": ("test_image.jpg", img_file, "image/jpeg")
    }

# 如果还有其他表单字段(比如描述、ID等),用data参数传递
form_data = {
    "image_desc": "这是一张测试用的图片",
    "user_id": "12345"
}

# 发送POST请求
response = requests.post(api_url, files=files, data=form_data)

# 查看响应结果
print(f"响应状态码: {response.status_code}")
print(f"响应内容: {response.text}")

几个要注意的细节

  • 不要手动设置Content-Type:别自己在headers里写{'Content-Type': 'multipart/form-data'},requests会自动生成带正确boundary的Content-Type,手动设置反而会导致请求失败。
  • 文件要以二进制模式打开:必须用rb模式打开图片文件,不然会出现编码错误。
  • 字段名要匹配API要求:比如API文档里要求文件字段叫file,那你files字典的键就得是file,不能随便写。
  • 确保文件路径正确:检查图片文件的路径是否存在,有没有权限读取。

如果之前你是用data参数传图片内容,那肯定会触发application/x-www-form-urlencoded的Content-Type,换成files参数就搞定啦!

内容的提问来源于stack exchange,提问作者Paul de Koning

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 06:59:58