Rails ping 网站并评估 Net::HTTP 响应
Rails ping website and evaluate Net::HTTP response
我正在做一个简单的方法来检查网站是否正常运行,这是我的 Ping 模型,其中包含我要检查的几个地址
require 'net/http'
def self.check
pings = Ping.all
pings.each do |p|
http = Net::HTTP.new(p.address,80)
response = http.request_get('/')
if response.message == ( 'OK' or 'Found')
puts 'up!!'
end
end
end
我只是检查响应消息是 "OK" 还是 "Found" 但我的 or 语句只检查 "OK".
还有这种检查方法好吗?
response.message == ( 'OK' or 'Found')
不会按照你的想法去做。
> ( 'OK' or 'Found')
=> "OK"
这就是它只检查 "OK" 的原因。恕我直言,您不应该检查消息,因为它可能会有所不同。检查 200 或 300 范围内任何内容的响应代码。
只要您不检查很多网站,上述内容就可以了。如果你是,它可能会开始需要一段时间,因为它们是连续的。
您可能还想添加超时,这样如果它尝试 ping 并失败 20 秒,请考虑站点关闭。
我也知道一些网站会 return 400 无法识别的用户代理错误。因此,您通过浏览器看到的内容可能根本不是您的脚本正在运行的内容。
正如@PhilipHallstrom 所指出的,您的 if
声明并没有按照您的想法行事。 (if a== (b or c)
!= if a == b || a == c
...还有区分大小写的问题。
尝试使用不区分大小写配置的正则表达式(末尾的 i
):
response.message.match /^(ok|found)$/i
...虽然...
我支持@PhilipHallstrom 对代码的保留意见。
数字代码可能会更好,应用程序响应能力应该是设计中的一个因素(我假设您已涵盖)...
我可能会选择:
response.code >= 200 && response.code < 400
我正在做一个简单的方法来检查网站是否正常运行,这是我的 Ping 模型,其中包含我要检查的几个地址
require 'net/http'
def self.check
pings = Ping.all
pings.each do |p|
http = Net::HTTP.new(p.address,80)
response = http.request_get('/')
if response.message == ( 'OK' or 'Found')
puts 'up!!'
end
end
end
我只是检查响应消息是 "OK" 还是 "Found" 但我的 or 语句只检查 "OK".
还有这种检查方法好吗?
response.message == ( 'OK' or 'Found')
不会按照你的想法去做。
> ( 'OK' or 'Found')
=> "OK"
这就是它只检查 "OK" 的原因。恕我直言,您不应该检查消息,因为它可能会有所不同。检查 200 或 300 范围内任何内容的响应代码。
只要您不检查很多网站,上述内容就可以了。如果你是,它可能会开始需要一段时间,因为它们是连续的。
您可能还想添加超时,这样如果它尝试 ping 并失败 20 秒,请考虑站点关闭。
我也知道一些网站会 return 400 无法识别的用户代理错误。因此,您通过浏览器看到的内容可能根本不是您的脚本正在运行的内容。
正如@PhilipHallstrom 所指出的,您的 if
声明并没有按照您的想法行事。 (if a== (b or c)
!= if a == b || a == c
...还有区分大小写的问题。
尝试使用不区分大小写配置的正则表达式(末尾的 i
):
response.message.match /^(ok|found)$/i
...虽然...
我支持@PhilipHallstrom 对代码的保留意见。
数字代码可能会更好,应用程序响应能力应该是设计中的一个因素(我假设您已涵盖)...
我可能会选择:
response.code >= 200 && response.code < 400