1

好的,我正在检查我的服务器是否正在运行。只要端口正确,它就可以工作。但是,如果我将端口更改为我知道的端口也不例外,它会完全跳过我的 if 例程。下面的示例工作正常。但是将端口号更改为 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
4

1 回答 1

5

您应该提供超时和救援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

true如果返回状态代码,则/返回,否则返回,即对于其他状态代码、超时和典型错误条件。200false

于 2013-05-08T16:18:01.620 回答