2010-04-20 10 views
5

Es gibt so viele Informationen darüber, wie man mehrteilige Antworten generiert oder mehrteilige Dateiuploads durchführt. Ich kann anscheinend keine Informationen darüber finden, wie man eine mehrteilige HTTP-Antwort verarbeitet. Hier ist eine IRB-Ausgabe von einer mehrteiligen HTTP-Antwort, mit der ich arbeite.Wie verarbeite ich Multipart-HTTP-Antworten in 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') oder vielleicht .split (/ (?: \\ r \\ n) {1,2} /) würde jedes setzen Teil der Antwort in ein Array. Sie könnten es mit ein wenig zusätzlicher Arbeit in einen Hash setzen, vielleicht helfen einige dieser Snippets: http://snippets.dzone.com/posts/show/302 Es hängt wirklich alles davon ab, was Sie eigentlich wollen mit der Antwort zu tun haben. – iain

Antwort

0

Sie können Rack-verwenden, die für Sie zu tun, hier ist die Nutzenfunktion, die es tut: Rack::Utils::parse_multipart. Offensichtlich müssen Sie Ihr Antwortobjekt wie ein Anfrageobjekt aussehen lassen, das Rack akzeptieren würde (das env-Objekt).

+0

Sie können 'httpadapter' verwenden, um in etwas zu übersetzen, das Rack versteht. –