Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby正在检查网站是否存在_Ruby - Fatal编程技术网

Ruby正在检查网站是否存在

Ruby正在检查网站是否存在,ruby,Ruby,好的,我正在检查我的服务器是否正在运行。只要端口正确,它就可以工作。但是,如果我把端口调到一个我知道也不例外的端口,它将完全跳过我的if例程。下面的例子很好用。但是将端口号更改为99,它将完全跳过if。我认为它应该属于else部分 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 r

好的,我正在检查我的服务器是否正在运行。只要端口正确,它就可以工作。但是,如果我把端口调到一个我知道也不例外的端口,它将完全跳过我的if例程。下面的例子很好用。但是将端口号更改为99,它将完全跳过if。我认为它应该属于else部分

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
您应该提供一个超时和rescue
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
,即,对于其他状态代码、超时和典型错误情况。

您应该提供超时和救援
SocketError
超时::错误

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
,例如,对于其他状态代码、超时和典型错误条件。

似乎有太多的
else
语句,看起来那里有太多的
else
语句。我们遗漏了什么吗?像这样的
else
在方法定义的上下文中是有效的,但它只有在没有触发异常的情况下才会触发。这可能不是这里的意图。@tadman但如果没有
rescue
它会发出警告,实际上是“rescue”,而不是“rescue”。谷歌搜索“ruby异常处理”之类的东西,如果你被卡住了,再问另一个StackOverflow问题。这里似乎有太多的
else
s语句,这里似乎有太多的
else
语句。我们遗漏了什么吗?像这样的
else
在方法定义的上下文中是有效的,但它只有在没有触发异常的情况下才会触发。这可能不是这里的意图。@tadman但如果没有
rescue
它会发出警告,实际上是“rescue”,而不是“rescue”。谷歌搜索“ruby异常处理”之类的东西,如果你被卡住了,再问另一个StackOverflow问题。使用第二个问题。工作得很有魅力。那个例子告诉我我做错了什么。谢谢。快速补充问题。如果我想使用https呢?只需设置端口就会采用https。美好的再次感谢。好的,这很有效。但这里有一个补充。如果我真的想翻一页呢。不仅是www.google.com,还有www.google.com/anypage.php。如果有必要,我正在使用另一个端口,请使用
http.head(“/anypage.php”)
使用第二个端口。工作得很有魅力。那个例子告诉我我做错了什么。谢谢。快速补充问题。如果我想使用https呢?只需设置端口就会采用https。美好的再次感谢。好的,这很有效。但这里有一个补充。如果我真的想翻一页呢。不仅是www.google.com,还有www.google.com/anypage.php。如果有问题,我正在使用一个备用端口,只需使用
http.head(“/anypage.php”)