我正在尝试读取来自marketplace web服务的响应。来自该web服务的每个其他响应都以XML格式返回。然而,这个特定的调用请求文件下载。我不熟悉它被退回的方式。在查看内容之后,有XML和编码的二进制数据,它们作为某种附件存在其中。
begin
response = Net::HTTP.start(url.host, url.port, :use_ssl => url.scheme == 'https') do |http|
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
http.request(request)
end
rescue Errno::ECONNRESET => e
count += 1
retry unless count > 10
puts "Tried 10 times and couldn't get #{url.host}: #{e}"
end
response.body
看起来像:
--MIMEBoundaryurn_uuid_AF2837F4196B2631EC15070889135182607126
Content-Type: application/xop+xml; charset=utf-8; type="text/xml"
Content-Transfer-Encoding: binary
Content-ID: <0.urn:uuid:AF2837F4196B2631EC15070889135182607127>
<?xml version='1.0' encoding='UTF-8'?>
<downloadFileResponse xmlns="http://www.marketplace.com/marketplace/services">
<ack>Success</ack>
<version>1.1.0</version>
<timestamp>2017-10-04T03:48:33.518Z</timestamp>
<fileAttachment>
<Size>25895</Size>
<Data><xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" href="cid:urn:uuid:E3A8215C82DBC51E6D1507090865513"/></Data>
</fileAttachment>
</downloadFileResponse>
--MIMEBoundaryurn_uuid_AF2837F4196B2631EC15070889135182607126
Content-Type: application/zip
Content-Transfer-Encoding: binary
Content-ID: <urn:uuid:E3A8215C82DBC51E6D1507090865513>
PK&úCKÃEK¬gdiâ6509805153_report.xmlUT hHâYhHâYux00ÃùÃsâ8â¿øË_°â¬Ã¼Ãâ =-â Ã6ÃÃ< âºââ¥ÂµÃ¯r@ NÃ¥Ãâ&èËÃÃÃÃ
êà çÃâ¡â¦Â¶+ùnÃ¥d=|ÅâÅÃñÃÅáæÃT:æËÃgÂ¥?Ãu¸Ãâ]ËËy]ïÆÃ~ËÂ¥â¥;tokvdâ:=â¬ÂªVM|/T!âËΩP'
ºâ¤â«Â¥ÃË¿ ÃjËxâUâÃÃT ã¬ÅË-ï¬Ã6â¿¢/ü>Ãú]âTd;n¯e¸ÃâË L%â°Ã¥qÃ*!é, òdB±â¥=Icâ¢Ã®ÃÃpéêÃâ¥Å¸Aââ¥=Ëâ8ŸûÃâ©âºW_vËÃ_âZâ¢]ËWâ¬$Ãâ¹ËËï¬_â9ûâÃ¥3â¬/Ãòbº)Å4â¦8KΩÃõÃî>äÃÃâŸËÃt\ÿâºÃ¯ËÃ{Æyâ7hÃt_=âºÃC$·Ã3åürÆÃ¢tgËúASuúÃ
£ªwnÿlç_'èoâäâ¢"ÃîAÃ)âÃÃ{Ë v£ÿuÃâ«âõL2Ãf«ÅæââÃâ¢Nïºb{â\Ÿâ{MSLnfGÃ,hËùâufÃ}ÃÃË<Múâ¥Â·Ã¡Ã«ÃVËÃL&Ã¥uKJÿBhöy&ŸâäËâãõ<o=UpÃË8«@ÃEKwÅlËÅ-âÃÂ¥Oâº4õÃâNâ~ÃÃ~Ãâ«Â TâÃÃâ¬aà x ¡$mÆÂ
...
--MIMEBoundaryurn_uuid_AF2837F4196B2631EC15070889135182607126--
显然,我可以看到这里有zip数据。但我读了其他每一个回复
Hash.from_xml
显然这在这里行不通。
Update
test.zip
Archive: test.zip
warning [test.zip]: 822 extra bytes at beginning or within zipfile
(attempting to process anyway)
inflating: 6509805153_report.xml
不确定它抱怨的额外字节是什么。
Update 2
这绝对是MIME头和XML信封。我可以确认,如果我手动删除这些字符和MIME页脚,那么测试文件将在没有警告的情况下解压。
因此,这似乎是一个包含zip文件的压缩XML信封。