在HTTP会话完成/关闭之前以及从服务器获取整个结果之前,任何Ruby库是否可以在从HTTP响应匹配模式时开始执行某些操作?
伪代码:
http.get 'http://example.org/foo.json' do |response|
run_this_function if /\"field\":\"data\"/ =~ response.body_str
end
我想要类似于odoe.js的东西,但是在Ruby中。
答案 0 :(得分:2)
通常,Net :: HTTP会将整个主体拉入内存,但您可以将该行为更改为流式传输。来自the documentation:
流式响应机构↑
默认情况下,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
的文档,因为您应该了解其他信息,但基本上它会说:
如果给出了一个块,则将主体传递给该块,并且当从插槽中读入时,正文将以片段形式提供。