2011-06-03 22 views
6

Estoy tratando de analizar un archivo XML desde una URL. Cuando intento algo como esto:¿Por qué obtengo "Errno :: ECONNREFUSED" con "net/http" en Rails?

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 

Todo funciona, pero solo cuando hago esto fuera de mi proyecto Rails. Si intento incluir este archivo en mi proyecto de Rails 3 y analizarlo allí, obtengo el error "Errno::ECONNREFUSED in [controller]" - Connection refused - connect(2).

Mi problema es el siguiente: no sé cómo instalar el componente net/http. Estoy buscando en http://www.rubygems.org, pero no puedo encontrarlo.

Respuesta

6

Net::HTTP es parte de la biblioteca estándar de Ruby. Puede usar require 'net/http' para cargarlo.

En lugar de usar Net::HTTP, que es bastante bajo nivel para lo que quiere hacer, recomendaría usar Ruby's Open::URI.

Si va a mover una gran cantidad de datos HTTP, es posible que desee ver en algo así como HTTPClient o bordillo o Tifón, que están diseñados para el uso de gran peso y ahorrar la molestia de tener que escribir todo usando Net::HTTP.

En cuanto al error ECONNREFUSED: es posible que desee capturar la respuesta HTTP devuelta desde get_response, luego verifique su estado antes de intentar leer el cuerpo. La forma en que lo está haciendo ahora no le permite reaccionar ante una solicitud fallida.

+0

Estoy recibiendo el mismo error, sin embargo, es antes de que get_response incluso devuelva. No puedo resolver cómo solucionar este problema. – finiteloop

+3

No te olvides 'http: //', que era mi problema: - / – finiteloop

2

Parece que el problema es que no puede conectarse al servidor HTTP.
Puede intentar verificar que puede acceder a la URL en un navegador.

+0

antes de verificar el servidor HTTP, verificaría si Internet está realmente conectado :) –

Cuestiones relacionadas