Ruby检查网站是否存在
好的,我正在检查我的服务器是否正在运行。 只要端口正确,它就可以工作。 但是,如果我将端口设置为一个我知道并不是例外,它完全会跳过我的常规操作。 以下示例运行正常。 但是将端口号更改为99,它会完全跳过if。 我认为它应该属于其他部分。
url = URI.parse("http://www.google.com/") url.port = 80 req = Net::HTTP.new(url.host, url.port) res = req.request_head(url.path) if res.code == "200" #do something else #do something else end
你应该提供一个超时并解救SocketError
和Timeout::Error
:
require "net/http" def check_server(server, port) begin http = Net::HTTP.start(server, port, {open_timeout: 5, read_timeout: 5}) begin response = http.head("/") if response.code == "200" # everything fine else # unexpected status code end rescue Timeout::Error # timeout reading from server end rescue Timeout::Error # timeout connecting to server rescue SocketError # unknown server end end
如果您只想检查服务器是否已启动,可以简化:
require "net/http" def up?(server, port) http = Net::HTTP.start(server, port, {open_timeout: 5, read_timeout: 5}) response = http.head("/") response.code == "200" rescue Timeout::Error, SocketError false end
如果/
返回200
状态代码则返回true
否则返回false
,即其他状态代码,超时和典型错误条件。