只是询问如何使用 javascript 检查是否存在互联网连接,并得到了一些很好的答案。 在 Ruby 中执行此操作最简单的方法是什么? 在尝试使生成的 html 标记代码尽可能干净时,我想根据是否有互联网条件有条件地呈现 javascript 文件的脚本标记。 像这样的东西(这是 HAML):
- if internet_connection?
%script{:src => "http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js", :type => "text/javascript"}
- else
%script{:src => "/shared/javascripts/jquery/jquery.js", :type => "text/javascript"}
require 'open-uri'
def internet_connection?
begin
true if open("http://www.google.com/")
rescue
false
end
end
这更接近OP所寻求的。它适用于 Ruby 1.8 和 1.9。也比较干净一点。
我喜欢每个人都简单地假设谷歌服务器已经启动。谷歌的信用。
如果您想知道自己是否有互联网而不依赖谷歌,那么您可以使用 DNS 来查看是否能够获得连接。
您可以使用 Ruby DNS Resolv 尝试将 url 转换为 IP 地址。 适用于 Ruby 版本 1.8.6+
所以:
#The awesome part: resolv is in the standard library
def has_internet?
require "resolv"
dns_resolver = Resolv::DNS.new()
begin
dns_resolver.getaddress("symbolics.com")#the first domain name ever. Will probably not be removed ever.
return true
rescue Resolv::ResolvError => e
return false
end
end
希望这可以帮助别人:)
您可以在 Ruby 中使用
Ping
类 <=1.9:
require 'resolv-replace'
require 'ping'
def internet_connection?
Ping.pingecho "google.com", 1, 80
end
该方法返回
true
或 false
并且不会引发异常。
与 Simone Carletti 的答案中的基础知识相同,但与 Ruby 2兼容:
# gem install "net-ping"
require "net/ping"
def internet_connection?
Net::Ping::External.new("8.8.8.8").ping?
end
require 'open-uri'
page = "http://www.google.com/"
file_name = "output.txt"
output = File.open(file_name, "a")
begin
web_page = open(page, :proxy_http_basic_authentication => ["http://your.company.proxy:80/", "your_user_name", "your_user_password"])
output.puts "#{Time.now}: connection established - OK !" if web_page
rescue Exception
output.puts "#{Time.now}: Connection failed !"
output.close
ensure
output.close
end
我试图找到与您类似的问题的解决方案,但找不到任何解决方案。不幸的是,由于某种我不知道的原因,
Ping.pingecho
方法对我不起作用。我想出了一个解决方案。最新的方法是使用 httparty
。我想在一个模块中做到这一点,所以就这样做了,而且效果很好
# gem install httparty
require "httparty"
module Main
def Main.check_net
begin
a = HTTParty.get("https://www.google.com")
if a.length() >= 100
puts "online"
end
rescue SocketError
puts "offline"
end
end
end
include Main
Main.check_net
Google 的套接字错误可能不会发生,因此此方法将起作用
def connected?
!!Socket.getaddrinfo("google.com", "http")
rescue SocketError => e
e.message != 'getaddrinfo: nodename nor servname provided, or not known'
end
由于它使用主机名,因此它需要做的第一件事是 DNS 查找,如果没有互联网连接,这会导致异常。