如何在Ruby on Rails中读取远程文件的内容?

16

2
http://www.ruby-doc.org/stdlib-1.9.3/libdoc/net/http/rdoc/Net/HTTP.html - dave
3个回答

24

我建议使用open-uri


我建议使用Open-uri。
require 'json'
require 'open-uri'
result = JSON.parse open('http://example.com/data.json').read

我发现OpenURI::HTTPError提供的信息比Net::HTTP返回的错误信息要少得多。我已经有一段时间没有使用OpenURI了,但如果我记得正确,它甚至没有告诉我状态码,所以404被视为与500相同。 - maurice
@maurice,实际上它确实告诉你HTTP状态码,这是一个由OpenURI::HTTPError包装的404示例 - 404 Not Found - Dmitrii Kharlamov

6
require 'net/http'
uri = URI('http://my.json.emitter/some/action')
json = Net::HTTP.get(uri)

json将包含您从uri中获取的JSON字符串。

然后阅读这篇StackOverflow文章。


1
require 'json'
require 'open-uri'

uri = URI.parse 'http://example.com/test.txt'
json =
  begin
    json_file = uri.open.read
  rescue OpenURI::HTTPError => e
    puts "Encountered error pulling the file: #{e}"
  else
    JSON.parse json_file
  end
  1. 我特意包括了open-uri,以便从该模块调用open,而不是尝试从Kernel模块调用私有的open
  2. 我有意解析URL以避免安全风险 - https://rubydoc.info/gems/rubocop/RuboCop/Cop/Security/Open
  3. 与一些评论者指出的不同,OpenURI确实指示错误的HTTP状态代码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接