作者giive (lala)
看板Ruby
标题侦测HTTP 状态程式
时间Sat Sep 23 09:06:37 2006
出自我的 Blog
http://lightyror.blogspot.com/2006/09/http-get.html
这里有一段Check HTTP 状态的程式
基本上是用 crontab 去跑就好
log function 大家就自由发挥吧,看你要写到那边都随便你
值得注意的是 response 不能直接用 == 去判断Net::HTTPSuccess或是其他的状态
因为Net::HTTPSuccess是一种很像是 range 的 object
直接用 == 判断会判断不出来得
建议是用 case when 来判断,他会使用 === 来判断
但是如果你要用 if 来改写的话 ,必须写成 Net::HTTPSuccess === response
我觉得这样比较不直觉 :p
require 'net/http'
url = '
http://www.example.com'
response = Net::HTTP.get_response(URI.parse(url))
begin
case response
when Net::HTTPSuccess
log 'OK'
when Net::HTTPNotFound
log '404 Error'
when Net::HTTPInternalServerError
log 'Internal Server Error'
when Net::HTTPUnauthorized
log 'Unauthorized'
when Net::HTTPClientError
log 'Client Error'
when Net::HTTPRedirection
log 'Redirect'
when Net::HTTPInformation
log 'Informantion'
when Net::HTTPServerError
log 'Server Error'
when Net::HTTPUnknownResponse
log 'Unknown Response'
end
rescue Timeout::Error
log 'System Timeout'
end
以下的 code 可以侦测这个网页处於那种状态
我特别将 404 error ,500 error 挑出来
因为他是最容易发现的错误,你可以根据这个错误去做判断
基本上只要有 response ,不管是那门子的 HTTP error ,Ruby 是不会 raise error 的
你必须使用 response.error! 或是 response.value 去 raise error
这样的特性也比较好 coding
但是最後,我们还是得去抓 Timeout::Error
为什麽?我们公司有一台 server ,跑 lighttpd
因为 lighttpd 会去 query application server 的 backend process
当backend process 挂掉的时候,他就不回应给 lighttpd
遇到这种情况 Lighttpd 就不回你错误讯息
这样子,一定要抓 Timeout::Error 才能知道出了啥问题
参考自Introduction to Ruby Net::HTTP,写的很好
HTTP Response 列表可以参考自 Ruby Manual
--
lighty RoR 是一个介绍 lighttpd , SQLite , Ruby and Rails 的 Blog
http://lightyror.blogspot.com/
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.230.108.209
※ 编辑: giive 来自: 61.230.108.209 (09/23 09:06)