实际上我正在编写一个ruby脚本,它根据HTTP-POST调用访问API。 当我使用特定的POST参数调用它时,API会返回一个包含textdocuments的zip文件。目前我正在使用Net :: HTTP Package。
现在我的问题: 据我所知,似乎将zip文件作为字符串返回。我可以看到" PK" (我认为它是压缩文件的PK-Header的一部分)和文档中的文本。
Content-Type Header告诉我" application / x-zip-compressed;名称=" somename.zip""
当我像这样保存zip文件时:
result = comodo.get_cert("<somenumber>")
puts result['Content-Type']
puts result.inspect
puts result.body
File.open("test.zip", "w") do |file|
file.write result.body
end
我可以在我的macbook上解压缩而不会出现进一步的问题。但是当我在Win10 PC上运行相同的代码时,它告诉我文件已损坏或不是ZIP文件。
它与编码有关吗?我可以改变吗,所以它在两者上都有效吗? 或者,如何从POST请求中接收zip文件是一种完全错误的方法?
PS: 我在Mac上的ruby版本:
ruby 2.2.3p173
我在Windows上的ruby版本:
ruby 2.2.4p230
非常感谢提前!
答案 0 :(得分:0)
问题是由于Windows处理行结束的方式(\r\n
用于Windows,而OS X和其他基于Unix的操作系统仅使用\n
)。使用File.open
时,使用仅w
的模式会使文件受行结束更改,因此任何出现的字节0x0A(或\n
)都会转换为字节0x0D 0x0A(或{ {1}}),有效地打破了拉链。
打开要写入的文件时,请使用模式\r\n
,因为这会抑制任何行结束更改。
http://ruby-doc.org/core-2.2.0/IO.html#method-c-new-label-IO+Open+Mode
答案 1 :(得分:0)
非常感谢!正如你发布解决方案我发现它自己..
由于一个人失踪而导致很多麻烦&#39; b&#39; :/
非常感谢!
解决方案(参见Ben Y's answer):
result = comodo.get_cert("<somenumber>")
puts result['Content-Type']
puts result.inspect
puts result.body
File.open("test.zip", "wb") do |file|
file.write result.body
end