我想从另一个网站获取信息。因此(可能)我应该向该网站发出请求(在我的情况下是HTTP GET请求)并接收响应。

我如何在Ruby on Rails中做到这一点?

如果可能的话,这是在我的控制器中使用的正确方法吗?


当前回答

require 'net/http'
result = Net::HTTP.get(URI.parse('http://www.example.com/about.html'))
# or
result = Net::HTTP.get(URI.parse('http://www.example.com'), '/about.html')

其他回答

require 'net/http'
result = Net::HTTP.get(URI.parse('http://www.example.com/about.html'))
# or
result = Net::HTTP.get(URI.parse('http://www.example.com'), '/about.html')

你可以使用Ruby的Net::HTTP类:

require 'net/http'

url = URI.parse('http://www.example.com/index.html')
req = Net::HTTP::Get.new(url.to_s)
res = Net::HTTP.start(url.host, url.port) {|http|
  http.request(req)
}
puts res.body

Net::HTTP内置在Ruby中,但让我们面对它,通常不使用其笨重的80年代风格,而是尝试更高级别的替代方案更容易:

HTTP的宝石 HTTParty RestClient Excon Feedjira(仅限RSS)

比起Net::HTTP,我更喜欢httpclient。

client = HTTPClient.new
puts client.get_content('http://www.example.com/index.html')

如果你要创建一个类作为服务的客户端,HTTParty是一个很好的选择。这是一个方便的混合,可以提供你所需的90%。在示例中查看谷歌和Twitter客户端有多短。

回答你的第二个问题:不,我不会把这个功能放在控制器中——如果可能的话,我会使用一个模型来封装细节(可能使用HTTParty),然后简单地从控制器调用它。

我最喜欢的抓取url内容的两种方法是OpenURI或Typhoeus。

OpenURI,因为它无处不在,还有Typhoeus,因为它非常灵活和强大。