2010-04-20 16 views
5

Hay tanta información por ahí sobre cómo generar respuestas de varias partes o cargas de archivos de varias partes. Parece que no puedo encontrar ninguna información sobre cómo procesar una respuesta http de varias partes. Aquí hay algunos resultados IRB de una respuesta http de varias partes con las que estoy trabajando.¿Cómo se procesan las respuestas http de varias partes en Ruby Net: 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 
+0

response.http.body [0..2048] .split ('\ r \ n') o tal vez .split (/ (?: \\ r \\ n) {1,2} /) pondría cada parte de la respuesta en una matriz. Podría ponerlo en un hash con un poco de trabajo adicional, tal vez algunos de estos fragmentos ayuden: http://snippets.dzone.com/posts/show/302 Realmente todo depende de lo que realmente quiere para hacer con la respuesta. – iain

Respuesta

0

Puede utilizar rack de hacer eso para usted, aquí está la función de utilidad que lo hace: Rack::Utils::parse_multipart. Obviamente, tendrá que hacer que su objeto de respuesta se vea como un objeto de solicitud que Rack aceptaría (el objeto env).

+0

Puede usar 'httpadapter' para traducir a algo que Rack entiende. –

Cuestiones relacionadas