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