Ruby检查网站是否存在

See*_*the 1 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
Run Code Online (Sandbox Code Playgroud)

Ste*_*fan 5

你应该提供超时和救援,SocketErrorTimeout::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
Run Code Online (Sandbox Code Playgroud)

如果您只想检查服务器是否已启动,可以简化:

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
Run Code Online (Sandbox Code Playgroud)

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