Net :: HTTP获取源代码和状态

时间:2011-06-09 19:39:13

标签: ruby

我目前正在使用以下网址获取页面的源代码:

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

我还希望获得HTTP状态,而无需再发出第二个请求。

有没有办法用另一种方法做到这一点?我一直在看文档,但似乎找不到我要找的东西。

2 个答案:

答案 0 :(得分:7)

在我看来,除非你需要一些真正的低级别访问或控制,否则你最好使用Ruby的内置Open::URI模块:

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/>

请注意base_uri的输出与我传入的URL不同.Open :: URI遵循重定向,Net :: HTTP不会这样做。如果您在代码中丢弃大量随机URL并且不想编写重定向处理程序,那么可以节省大量时间。

答案 1 :(得分:2)

对不起,实际上已经弄明白了:)。

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 >