0

我需要请求一个 http api,问题是,不是所有参数都由&分隔的常见 post 请求,而是他们希望对每个参数都有一个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 请求有一个很好的问题和答案,问题是您必须为每个参数创建一个文件,为一个简单的 api 请求创建 10 个不同的文件是无稽之谈。

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

4

2 回答 2

0

就在这里 :)

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

IE:

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)
于 2013-04-08T10:20:44.423 回答
0

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

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

于 2013-04-08T14:51:05.907 回答