【问题标题】:What is the difference between Ruby's 'open-uri' and 'Net:HTTP' gems?Ruby 的“open-uri”和“Net:HTTP”gem 有什么区别?
【发布时间】:2013-05-21 18:29:21
【问题描述】:

看起来这两个 gem 执行的任务非常相似。谁能举例说明一种宝石比另一种更有用的地方?我没有我所指的特定代码,我更想知道每个 gem 的一般用例。我知道这是一个简短的问题,我会根据要求填写空白。谢谢。

【问题讨论】:

  • 如果open-uri 符合它的名字,这可能意味着它可以处理除http 之外的其他方案。

标签: ruby gem net-http open-uri


【解决方案1】:

它们看起来执行相似任务的原因是 OpenURI 是 Net::HTTP、Net::HTTPS 和 Net::FTP 的包装器。

通常,除非您觉得需要较低级别的接口,否则使用 OpenURI 会更好,因为您可以用更少的代码来解决问题。使用 OpenURI,您可以打开 URL/URI 并将其视为文件。

见:http://www.ruby-doc.org/stdlib-1.9.3/libdoc/open-uri/rdoc/OpenURI.htmlhttp://ruby-doc.org/stdlib-1.9.3//libdoc/net/http/rdoc/Net.html

【讨论】:

  • 谢谢亚历克斯。抱歉,什么是“包装器”?
  • 包装器只是一个库,它使用一个或多个其他库来创建更好、更高级别的接口。在这种特定情况下,OpenURI 使用 Net 库来公开一个更熟悉的接口,即从文件中读取的接口。
【解决方案2】:

我刚刚发现open 确实遵循重定向,而Net::HTTP 没有,这是一个重要的区别。

例如,open('http://www.stackoverflow.com') { |content| puts content.read } 将在重定向后显示正确的 HTML,而 Net::HTTP.get(URI('http://www.stackoverflow.com')) 将显示重定向消息和 302 状态代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    • 2013-09-06
    • 2011-07-21
    相关资源
    最近更新 更多