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

使用Ruby Net::HTTP调用multipart/form-data API时出现无边界错误

解决Net::HTTP调用multipart/form-data API时的边界缺失问题

问题原因

你遇到的错误是因为服务器未接收到multipart请求的边界标识。Ruby标准库的Net::HTTP#set_form方法在手动传入字符串'multipart/form-data'作为content type时,不会自动生成并添加边界参数到请求头,导致服务器无法解析请求体。

修复方案

1. 改用:multipart符号自动生成边界

将原代码中的:

request.set_form form_data, 'multipart/form-data'

替换为:

request.set_form form_data, :multipart

当传入:multipart时,Net::HTTP会自动生成随机边界,并将Content-Type请求头设置为multipart/form-data; boundary=xxxxxx,服务器就能正确识别并解析请求。

2. 优化表单数据格式(可选但推荐)

  • 为email_data字段指定application/json的content type,确保服务器正确解析JSON内容
  • 以二进制模式读取文件,避免编码问题
  • 显式指定文件名,符合HTTP规范

修改后的form_data:

form_data = [
  [
    'email_data',
    '{"message":"Test\tMessage","type":"mobi","priority":"LOW","email":{"to_email_ids":["awadesh@temp.com"],"cc_email_ids":[],"bcc_email_ids":[],"from_email_id":"automation@temp.com","subject":"subject - test email","attachment":[]}}',
    { content_type: 'application/json' }
  ],
  [
    'attachment',
    File.open('/Users/dummy/Desktop/Screenshot 2022-11-07 at 10.45.11 AM.png', 'rb'),
    { filename: 'Screenshot 2022-11-07 at 10.45.11 AM.png' }
  ]
]

完整修复后的代码

require "uri"
require "net/http"

url = URI("[base_url]/rest/v1/companies/11/notifications/email-with-attachment?content_type=static")

https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true

request = Net::HTTP::Post.new(url)
request["client"] = "mobi"
form_data = [
  [
    'email_data',
    '{"message":"Test\tMessage","type":"mobi","priority":"LOW","email":{"to_email_ids":["awadesh@temp.com"],"cc_email_ids":[],"bcc_email_ids":[],"from_email_id":"automation@temp.com","subject":"subject - test email","attachment":[]}}',
    { content_type: 'application/json' }
  ],
  [
    'attachment',
    File.open('/Users/dummy/Desktop/Screenshot 2022-11-07 at 10.45.11 AM.png', 'rb'),
    { filename: 'Screenshot 2022-11-07 at 10.45.11 AM.png' }
  ]
]
request.set_form form_data, :multipart

response = https.request(request)
puts response.read_body

验证逻辑

修改后,Net::HTTP会自动处理边界生成和请求头设置,请求格式会与curl的有效请求一致,服务器就能正常解析multipart数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 19:20:30