Ruby:使用open()和NET :: HTTP模块获取Web内容有什么区别?

Cra*_*lot 5 ruby http

单独的SO帖子提供了用于获取Ruby中Web内容的不同方法,但并未完全解释为什么一个方法比另一个方法更受欢迎。

如下所示,使用open()和NET :: HTTP模块来获取Web内容有什么区别?为什么NET :: HTTP被认为是“更好”的方法?

**open() 1:**    
require 'open-uri'
file = open('http://hiscore.runescape.com/index_lite.ws?player=zezima')
contents = file.read

**open() 2:**
require 'open-uri'
source = open('http://www.google.com', &:read)

**NET::HTTP 1:**
require 'uri'
require 'net/http'
url = "http://hiscore.runescape.com/index_lite.ws?player=zezima"
r = Net::HTTP.get_response(URI.parse(url).host, URI.parse(url).path)
Run Code Online (Sandbox Code Playgroud)

Agi*_*gis 3

经验法则:尽可能使用。OpenURI

原因是这OpenURI只是一个包装器Net::HTTP,因此需要编写更少的代码。因此,如果您所做的只是执行简单的 GET 请求,那就去做吧。

另一方面,如果您想要一些您没有提供的Net::HTTP较低级别的功能,则更喜欢。OpenURI这不是更好的方法,但它在配置方面提供了更大的灵活性。

正如官方文档所述:

如果您只执行一些 GET 请求,您应该尝试 OpenURI。