【问题标题】:Why do I get "Errno::ECONNREFUSED" with 'net/http' in Rails?为什么我在 Rails 中使用“net/http”得到“Errno::ECONNREFUSED”?
【发布时间】:2011-09-08 01:21:45
【问题描述】:

我正在尝试从 URL 解析 XML 文件。当我尝试这样的事情时:

require 'net/http'
require 'rubygems'
require 'xmlsimple'

url = 'http://my-address.com/xmltest/note.xml'
xml_data = Net::HTTP.get_response(URI.parse(url)).body

一切正常,但只有当我在 Rails 项目之外执行此操作时。如果我尝试将此文件包含在我的 Rails 3 项目中并在那里解析它,我会收到错误 "Errno::ECONNREFUSED in [controller]" - Connection refused - connect(2)

我的问题如下:我不知道如何安装net/http 组件。我正在http://www.rubygems.org 上寻找它,但我找不到它。

【问题讨论】:

    标签: ruby-on-rails ruby net-http


    【解决方案1】:

    Net::HTTP 是 Ruby 标准库的一部分。您可以使用require 'net/http' 来加载它。

    我建议使用 Ruby 的 Open::URI,而不是使用 Net::HTTP,这对于你想做的事情来说是相当低级的。

    如果您要移动大量 HTTP 数据,您可能需要研究类似 HTTPClient 或 Curb 或 Typhoeus 之类的东西,它们专为重量级用途而设计,省去了使用 Net::HTTP 编写所有内容的麻烦。 .

    关于ECONNREFUSED 错误:您可能希望捕获从get_response 返回的HTTPResponse,然后在尝试读取正文之前检查其状态。您现在的操作方式无法让您对失败的请求做出反应。

    【讨论】:

    • 我收到了同样的错误,但它甚至在 get_response 返回之前。我不知道如何解决这个问题。
    【解决方案2】:

    问题似乎是您无法连接到 HTTP 服务器。
    您可以尝试检查您是否可以在浏览器中访问该 URL。

    【讨论】:

    • 在检查 HTTP 服务器之前,我会验证 Internet 是否实际连接 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-29
    相关资源
    最近更新 更多