2013-11-14 268 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的文档,因为是你应该知道的更多信息,但基本上它说:

如果块给出,身体被传递到块,身体在片段提供,如它从套接字读入。