2013-11-14 296 views
0

在HTTP會話完成/關閉之前以及從服務器獲取整個結果之前,是否有可能使用任何Ruby庫在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

你是在rails上還是在ruby上運行? – sabrams

+0

只是紅寶石。我正在寫一個http客戶端。 – pkhamre

回答

2

正常情況下,Net :: HTTP會將整個機體拉入內存,但是您可以將該行爲更改爲流式傳輸。從the documentation

流響應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的文檔,因爲是你應該知道的更多信息,但基本上它說:

如果塊給出,身體被傳遞到塊,身體在片段提供,如它從套接字讀入。