2016-03-29 19 views
-1

'daki zip dosyası nasıl alınır? HTTP-POST çağrılarına dayalı bir API'ye erişen bir ruby ​​komut dosyası yazarım. API, belirli POST Parametreleriyle çağırdığımda metin belgelerini içeren bir zip dosyası döndürür. Şu anda bunu Net :: HTTP Paketi ile yapıyorum.Ruby yazma zip dosyası Mac üzerinde çalışıyor ancak windows'ta çalışmıyor/Net :: HTTP

Şimdi benim sorunum: Zip dosyasını bildiğim kadarıyla bir dize olarak döndürüyor gibi görünüyor. "PK" (zip dosyalarının PK-Başlığının bir parçası olduğunu varsayalım) ve belgelerdeki metni görebiliyorum.

İçerik Türü Üstbilgisi bana "application/x-zip-sıkıştırılmış; name =" somename.zip "" diyor.

i şöyle zip dosyasını kaydettiğinizde:

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 

Ben daha sorunsuz benim macbook üzerinde unzip yapabilirsiniz. Ancak Win10 PC'imde aynı kodu çalıştırdığımda dosyanın bozuk olduğunu veya bir ZIP dosyası olmadığını söyler.

Kodlamayla ilgili bir şey var mı? Onu değiştirebilir miyim, yani ikisi üzerinde çalışıyor mu? Veya bir POST-isteğinden bir zip dosyası nasıl elde etmek için tam bir yanlış bir yaklaşım mı? Windows üzerinde

ruby 2.2.3p173 

Benim yakut-versiyon:

PS

: Mac üzerinde My yakut-version önceden

ruby 2.2.4p230 

çok teşekkür ederiz!

cevap

0

Sorun, Windows'un satır sonlarını işleme biçiminden kaynaklanıyor (Windows için \r\n, OS X ve diğer Unix tabanlı işletim sistemleri yalnızca \n kullanıyor). File.open'u kullanırken, yalnızca w modunu kullanarak, dosyanın satır sonu değişikliklerine tabi tutması nedeniyle, bayt 0x0A'nın (veya \n) herhangi bir yinelemesi, fili etkin bir şekilde kesen 0x0D 0x0A (veya \r\n) baytlarına dönüştürülür.

Dosyayı yazmak üzere açarken, herhangi bir satır sonu değişikliğini kaldıracağı için, wb modunu kullanın.

http://ruby-doc.org/core-2.2.0/IO.html#method-c-new-label-IO+Open+Mode

0

çok teşekkür ederiz!/

Çok teşekkür ederim: Eğer çözüm yayınlanmıştır gibi ben çünkü birinin

çok dert 'b' eksik .. kendim buldum!

çözeltisi (Ben Y's answer bakınız):

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 
İlgili konular