0

当从 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 中。

4

1 回答 1

2

通常 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获取您应该注意的其他信息,但基本上它说:

如果给出了一个块,则将主体传递给该块,并且主体以片段的形式提供,因为它是从套接字读取的。

于 2013-11-14T21:30:00.283 回答