Как обрабатывать составные HTTP-ответы в Ruby Net:HTTP?

Существует так много информации о том, как генерировать составные ответы или загружать составные файлы. Кажется, я не могу найти никакой информации о том, как обрабатывать составной http-ответ. Вот некоторый вывод IRB из составного http-ответа, с которым я работаю.

>> 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 

person awesome_person    schedule 20.04.2010    source источник
comment
response.http.body[0..2048].split('\r\n') или, может быть, .split(/(?:\\r\\n){1,2}/) поместит каждую часть ответ в массив. Вы можете поместить его в хеш, немного поработав, возможно, некоторые из этих фрагментов помогут: snippets.dzone.com/posts/show/302 На самом деле все зависит от того, что вы на самом деле хотите сделать с ответом.   -  person iain    schedule 18.01.2011


Ответы (1)


Вы можете использовать Rack, чтобы сделать это за вас, вот вспомогательная функция, которая делает это: Стойка::Utils::parse_multipart. Очевидно, вам придется сделать так, чтобы ваш объект ответа выглядел так, как объект запроса, который Rack примет (объект env).

person Maurício Linhares    schedule 20.01.2011
comment
Вы можете использовать httpadapter для перевода на то, что Rack понимает. - person Bob Aman; 20.01.2011