2011-06-09 30 views
5

Actualmente estoy recibiendo el código fuente de la página usando:Net :: HTTP obtener el código fuente y el estado

Net::HTTP.get(URI.parse(page.url)) 

También me gustaría obtener el estado HTTP, sin hacer una segunda solicitud.

¿Hay alguna manera de hacerlo con otro método? He estado mirando la documentación, pero parece que no puedo encontrar lo que estoy buscando.

Respuesta

2

Lo siento, en realidad lo descubrí :).

ruby-1.9.2-p136 :004 > r = Net::HTTP.get_response(URI.parse('http://badurlexample.com')) 
=> #<Net::HTTPInternalServerError 500 Internal Server Error readbody=true> 
ruby-1.9.2-p136 :005 > r.inspect 
=> "#<Net::HTTPInternalServerError 500 Internal Server Error readbody=true>" 
ruby-1.9.2-p136 :006 > r.body 
=> "1 Errors:\r\nLine: 40 - ; expected" 
ruby-1.9.2-p136 :007 > 
7

En mi opinión, a menos que necesite algunos reales de acceso de bajo nivel o de control, que es mejor usar Ruby incorporado Open::URI módulo:

require 'open-uri' 
io = open('http://www.example.org/') #=> #<StringIO:0x0000010103e240> 
body = io.read[0, 50] #=> "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Trans" 
io.status #=> ["200", "OK"] 
io.base_uri #=> #<URI::HTTP:0x00000100bf2ad8 URL:http://www.iana.org/domains/example/> 

en cuenta que la salida de base_uri es diferente de la URL que ingresé. Open :: URI sigue los redireccionamientos para usted, lo que Net :: HTTP no hará. Eso puede recompensar a lo grande si está lanzando muchas URL aleatorias a su código y no quiere tener que escribir el manejador de redirección.

Cuestiones relacionadas