刚刚问过check if an internet connection exists using javascript如何得到一些很好的答案。在Ruby中最简单的方法是什么?在尝试使生成的html标记代码尽可能干净时,我想有条件地渲染javascript文件的脚本标记,具体取决于是否存在Internet条件。像(这是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"}
答案 0 :(得分:19)
require 'open-uri'
def internet_connection?
begin
true if open("http://www.google.com/")
rescue
false
end
end
这更接近OP正在寻找的东西。它适用于Ruby 1.8和1.9。它也有点清洁。
答案 1 :(得分:10)
我喜欢每个人都认为googles服务器正常运行。谷歌的信用。
如果您想知道自己是否有互联网而不依赖谷歌,那么您可以使用DNS查看您是否能够获得连接。
您可以使用Ruby DNS Resolv尝试将网址转换为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
希望这可以帮助某人:)
答案 2 :(得分:4)
您可以使用Ping
类。
require 'resolv-replace'
require 'ping'
def internet_connection?
Ping.pingecho "google.com", 1, 80
end
该方法返回true
或false
,但不会引发异常。
答案 3 :(得分:2)
与Simone Carletti's answer相同的基础知识,但与 Ruby 2 兼容:
# gem install "net-ping"
require "net/ping"
def internet_connection?
Net::Ping::External.new("8.8.8.8").ping?
end
答案 4 :(得分:1)
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
答案 5 :(得分:0)
我试图找到与您类似的问题的解决方案,但找不到任何解决方案。不幸的是,由于某种我不知道的原因,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 的套接字错误可能不会发生,因此此方法有效
答案 6 :(得分:-1)
def connected?
!!Socket.getaddrinfo("google.com", "http")
rescue SocketError => e
e.message != 'getaddrinfo: nodename nor servname provided, or not known'
end
由于它使用主机名,所以它需要做的第一件事是DNS查找,如果没有互联网连接,则会导致异常。