在Ruby Net:HTTP中,如何处理多部分HTTP响应?

5

关于如何生成多部分响应或进行多部分文件上传,有很多信息可供参考。但是我无法找到任何有关如何处理多部分HTTP响应的信息。以下是我正在处理的一个多部分HTTP响应的IRB输出。

>> response.http.content_type
=> "multipart/related"
>> response.http.body[0..2048]
=> "\r\n------=_Part_3_806633756.1271797659309\r\nContent-Type: text/xml; charset=UTF-8\r\nContent-Transfer-Encoding: binary\r\nContent-Id: <A0FCC4333C6D0FCA346B97FAB6B61818>\r\n\r\n<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soapenv:Body><ns1:runReportResponse soapenv:encodingStyle="http://www.w3.org/2003/05/soap-encoding" xmlns:ns1="http://192.168.1.200:8080/jasperserver/services/repository"><ns2:result xmlns:ns2="http://www.w3.org/2003/05/soap-rpc">runReportReturn</ns2:result><runReportReturn xsi:type="xsd:string">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;\n&lt;operationResult version=&quot;2.0.1&quot;&gt;\n\t&lt;returnCode&gt;&lt;![CDATA[0]]&gt;&lt;/returnCode&gt;\n&lt;/operationResult&gt;\n</runReportReturn></ns1:runReportResponse></soapenv:Body></soapenv:Envelope>\r\n------=_Part_3_806633756.1271797659309\r\nContent-Type: application/pdf\r\nContent-Transfer-Encoding: binary\r\nContent-Id: <report>\r\n\r\n%PDF-1.4\n%\342\343\317\323\n3 0 obj 

response.http.body[0..2048].split('\r\n') 或者 .split(/(?:\r\n){1,2}/) 可以将响应的每个部分放入一个数组中。你可以通过一些额外的工作将其放入哈希表中,也许这些片段中的一些会有所帮助:http://snippets.dzone.com/posts/show/302这实际上取决于你想要对响应做什么。 - ian
1个回答

0
你可以使用Rack来完成这个任务,以下是实用函数:Rack::Utils::parse_multipart。显然,你需要让你的响应对象看起来像一个Rack可以接受的请求对象(env对象)。

你可以使用 httpadapter 将其转换为 Rack 可以理解的内容。 - Bob Aman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接