Ruby 如何在不在硬盘上创建文件的情况下发出多部分请求?

Ruby 如何在不在硬盘上创建文件的情况下发出多部分请求?,ruby,multipartform-data,multipart,Ruby,Multipartform Data,Multipart,我需要请求一个http api,问题是不是所有参数都由一个&分隔的普通post请求,他们希望每个参数都有一个多部分请求,如下所示: POST /core/eligibility HTTP/1.1 Host: server_host:server_port Content-Length: 2408 Content-Type: multipart/form-data; boundary=XbCY --XbCY Content-Disposition: form-data; name=“Pa

我需要请求一个http api,问题是不是所有参数都由一个&分隔的普通post请求,他们希望每个参数都有一个多部分请求,如下所示:

POST /core/eligibility HTTP/1.1 
Host: server_host:server_port 
Content-Length: 2408 
Content-Type: multipart/form-data; boundary=XbCY 
--XbCY 
Content-Disposition: form-data; name=“PayloadType“ 
X12_270_Request_005010X279A1 
--XbCY 
Content-Disposition: form-data; name=“ProcessingMode" 
RealTime 
--XbCY 
Content-Disposition: form-data; name=“PayloadID" 
e51d4fae-7dec-11d0-a765-00a0c91e6da6 
--XbCY 
Content-Disposition: form-data; name=“TimeStamp" 
2007-08-30T10:20:34Z 
--XbCY 
Content-Disposition: form-data; name=“UserName" 
hospa 
--XbCY 
Content-Disposition: form-data; name=“Password" 
8y6dt3dd2 
--XbCY 
Content-Disposition: form-data; name=“SenderID" 
HospitalA 
--XbCY 
Content-Disposition: form-data; name=“ReceiverID" 
PayerB 
--XbCY 
Content-Disposition: form-data; name=“CORERuleVersion" 
2.2.0 
--XbCY 
Content-Disposition: form-data; name=“Payload" 
<contents of file go here -- 1674 bytes long as specified above> 
--XbCY— 
POST/core/quality HTTP/1.1
主机:服务器\主机:服务器\端口
内容长度:2408
内容类型:多部分/表单数据;边界=XbCY
--XbCY
内容配置:表单数据;name=“PayloadType”
X12_270_请求_005010X279A1
--XbCY
内容配置:表单数据;name=“ProcessingMode”
实时
--XbCY
内容处置:表单数据;name=“PayloadID”
e51d4fae-7dec-11d0-a765-00a0c91e6da6
--XbCY
内容处置:表单数据;name=“TimeStamp”
2007-08-30T10:20:34Z
--XbCY
内容处置:表单数据;name=“UserName”
霍斯帕
--XbCY
内容处置:表单数据;name=“密码”
8y6dt3dd2
--XbCY
内容处置:表单数据;name=“SenderID”
医院
--XbCY
内容处置:表单数据;name=“ReceiverID”
PayerB
--XbCY
内容处置:表单数据;name=“CORERuleVersion”
2.2.0 
--XbCY
内容处置:表单数据;name=“有效负载”
--XbCY-
使用ruby发送多部分请求有一个好处,问题是必须为每个参数创建一个文件,为一个简单的api请求创建10个不同的文件是毫无意义的

有没有一种方法可以在不需要在磁盘上创建文件的情况下执行相同的操作?

是的,有:)

通过查看gem,我发现有一个很好的参数称为多部分,当其为true时,所有参数都像多部分请求一样发送

即:


由于磁盘I/O或杂乱或其他原因而创建文件时,您不可能知道您关心的是什么


如果是任何类型的I/O,您应该能够使用Ruby的StringIO类,而不是常规IO对象。所有内容都在内存中写入和读取,使用字符串作为缓冲区。

您是否担心由于空间、速度或其他原因而临时创建那么多文件?我担心的是必须为每个对象创建11个临时文件我想做的一个api请求,而且我已经在字符串上有了值,创建11个临时文件来提交一个api请求,并在api提交后删除这些文件感觉很难看,所以我希望能够使用变量上已有的值来进行多部分HTTP请求e主题,我也在使用git://github.com/nicksieger/multipart-post.git 直到我在rest-client上找到这个功能。我关心的是,当我的内存中有字符串时,必须创建11个临时文件。你能发布一个如何使用StringIO的示例吗?Thx
require 'rest-client'
request_params = {
   CORERuleVersion: "value1",
   PayloadType: "value2",
   ProcessingMode: "value3",
   UserName: "value4",
   Password: "value5",
   SenderID: "value6",
   ReceiverID: "value7",
   PayloadID: "value8",
   TimeStamp: Time.now.utc.iso8601,
   Payload: "long_payload",
   multipart: true
}
RestClient.post("http://www.example.com", request_params)