Как мне скачать бинарный файл по HTTP?

Как загрузить и сохранить двоичный файл по HTTP с помощью Ruby?

URL-адрес http://somedomain.net/flv/sample/sample.flv.

Я работаю на платформе Windows и предпочитаю не запускать какие-либо внешние программы.

128
задан the Tin Man 10 May 2013 в 04:55
поделиться

2 ответа

Самый простой способ - это решение для конкретной платформы:

 #!/usr/bin/env ruby
`wget http://somedomain.net/flv/sample/sample.flv`

Вероятно, вы ищете:

require 'net/http'
# Must be somedomain.net instead of somedomain.net/, otherwise, it will throw exception.
Net::HTTP.start("somedomain.net") do |http|
    resp = http.get("/flv/sample/sample.flv")
    open("sample.flv", "wb") do |file|
        file.write(resp.body)
    end
end
puts "Done."

Изменить: Изменено. Спасибо.

Edit2: Решение, которое сохраняет часть файла при загрузке:

# instead of http.get
f = open('sample.flv')
begin
    http.request_get('/sample.flv') do |resp|
        resp.read_body do |segment|
            f.write(segment)
        end
    end
ensure
    f.close()
end
143
ответ дан 24 November 2019 в 00:34
поделиться

Пример 3 в документации Ruby's net/http показывает, как загрузить документ по HTTP и вывести файл вместо того, чтобы просто загрузить его в память, заменив puts двоичной записью в файл, например, как показано в ответе Dejw.

Более сложные случаи показаны далее в том же документе.

28
ответ дан 24 November 2019 в 00:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: