我需要申请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>
有没有办法在不需要在磁盘上创建文件的情况下做同样的事情?
答案 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对象。使用字符串作为缓冲区,所有内容都在内存中写入和读取。