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