如何在不在硬盘上创建文件的情况下制作Multipart请求?

时间:2013-04-08 10:20:44

标签: ruby multipartform-data multipart

我需要申请http api,问题在于,所有参数都由& 分隔,而不是常见的帖子请求,他们期望 Multipart 请求每个参数如下:

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— 

关于使用ruby发送Multipart请求有一个很好的question and answer,问题是你必须为每个参数创建一个文件,为简单的api请求创建10个不同的文件是无稽之谈。< / p>

有没有办法在不需要在磁盘上创建文件的情况下做同样的事情?

2 个答案:

答案 0 :(得分:0)

是的,有:)

通过查看gem rest-client ,我发现有一个很好的参数叫做 multipart ,当它的 true 时,所有参数都像多部分请求一样发送。

即:

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)

答案 1 :(得分:0)

由于磁盘I / O或混乱或什么原因,无法确定您关心的是什么,创建文件。

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