2010-04-20 7 views
5

Il existe tellement d'informations sur la façon de générer des réponses en plusieurs parties ou de faire des téléchargements de fichiers en plusieurs parties. Je ne peux pas trouver d'informations sur la façon de traiter une réponse http multipart. Voici quelques résultats IRB d'une réponse http multipart avec laquelle je travaille.Comment traiter les réponses http multipart dans 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') ou peut-être .split (/ (?: \\ r \\ n) {1,2} /) mettrait chaque partie de la réponse dans un tableau. Vous pouvez le mettre dans un hachage avec un peu de travail supplémentaire, peut-être certains de ces extraits aideront: http://snippets.dzone.com/posts/show/302 Tout dépend de ce que vous voulez vraiment à voir avec la réponse. – iain

Répondre

0

Vous pouvez utiliser rack pour le faire pour vous, voici la fonction d'utilité qu'il fait: Rack::Utils::parse_multipart. Évidemment, vous devrez faire en sorte que votre objet de réponse ressemble à un objet de requête que Rack accepterait (l'objet env).

+0

Vous pouvez utiliser 'httpadapter' pour traduire quelque chose que Rack comprend. –

Questions connexes