2013-11-14 2 views
0

Возможно ли, если любая библиотека Ruby начнет что-то делать, когда шаблон сопоставляется с ответом HTTP, до того, как сеанс HTTP завершен/закрыт и до того, как весь результат будет получен с сервера?Реакция на HTTP-ответ до ответа завершена?

псевдокод:

http.get 'http://example.org/foo.json' do |response| 
    run_this_function if /\"field\":\"data\"/ =~ response.body_str 
end 

Я хочу что-то похожее на odoe.js, но в Ruby.

+0

Вы работаете на рельсах или просто рубине? – sabrams

+0

Просто рубин. Я пишу http-клиент. – pkhamre

ответ

2

Обычно Net :: HTTP вытаскивает все тело в память, но вы можете изменить это поведение на потоковое. От the documentation:

Streaming Response Bodies¶ ↑

По умолчанию Net :: HTTP читает весь ответ в память. Если вы обрабатываете большие файлы или хотите реализовать индикатор выполнения, вы можете вместо этого передать тело непосредственно в IO.

uri = URI('http://example.com/large_file') 

Net::HTTP.start(uri.host, uri.port) do |http| 
    request = Net::HTTP::Get.new uri 

    http.request request do |response| 
    open 'large_file', 'w' do |io| 
     response.read_body do |chunk| 
     io.write chunk 
     end 
    end 
    end 
end 

Вы хотите, чтобы ваш код ночевать в read_body блоке. Обратитесь к документации по read_body как есть дополнительная информация, которую вы должны быть в курсе, но в основном он говорит:

Если блок задан, тело передается в блок, а корпус снабжен фрагментарно, а он считывается из гнезда.

Смежные вопросы