我目前得到使用頁面的源代碼:的Net :: HTTP GET源代碼和狀態
Net::HTTP.get(URI.parse(page.url))
我也想獲得HTTP狀態,而不進行第二次請求。
有沒有辦法用另一種方法做到這一點?我一直在看文檔,但似乎無法找到我在找什麼。
我目前得到使用頁面的源代碼:的Net :: HTTP GET源代碼和狀態
Net::HTTP.get(URI.parse(page.url))
我也想獲得HTTP狀態,而不進行第二次請求。
有沒有辦法用另一種方法做到這一點?我一直在看文檔,但似乎無法找到我在找什麼。
對不起,實際上已經想通了:)。
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 >
在我看來,除非你需要一些真正的低級別的訪問或控制,你最好使用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並且不想編寫重定向處理程序,這可以節省大量的時間。