【发布时间】:2013-05-21 18:29:21
【问题描述】:
看起来这两个 gem 执行的任务非常相似。谁能举例说明一种宝石比另一种更有用的地方?我没有我所指的特定代码,我更想知道每个 gem 的一般用例。我知道这是一个简短的问题,我会根据要求填写空白。谢谢。
【问题讨论】:
-
如果
open-uri符合它的名字,这可能意味着它可以处理除http之外的其他方案。
标签: ruby gem net-http open-uri
看起来这两个 gem 执行的任务非常相似。谁能举例说明一种宝石比另一种更有用的地方?我没有我所指的特定代码,我更想知道每个 gem 的一般用例。我知道这是一个简短的问题,我会根据要求填写空白。谢谢。
【问题讨论】:
open-uri 符合它的名字,这可能意味着它可以处理除http 之外的其他方案。
标签: ruby gem net-http open-uri
它们看起来执行相似任务的原因是 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.html 和http://ruby-doc.org/stdlib-1.9.3//libdoc/net/http/rdoc/Net.html
【讨论】:
我刚刚发现open 确实遵循重定向,而Net::HTTP 没有,这是一个重要的区别。
例如,open('http://www.stackoverflow.com') { |content| puts content.read } 将在重定向后显示正确的 HTML,而 Net::HTTP.get(URI('http://www.stackoverflow.com')) 将显示重定向消息和 302 状态代码。
【讨论】: