require 'net/http'
require 'uri'
Net::HTTP.get_print URI.parse('http://www.example.com/index.html')
当我试图运行这个程序时,我得到这样的错误为什么?
c:/ruby/lib/ruby/1.8/net/http.rb:560:in `initialize': getaddrinfo: no address associated with hostname. (SocketError)
from c:/ruby/lib/ruby/1.8/net/http.rb:560:in `open'
from c:/ruby/lib/ruby/1.8/net/http.rb:560:in `connect'
from c:/ruby/lib/ruby/1.8/timeout.rb:48:in `timeout'
from c:/ruby/lib/ruby/1.8/timeout.rb:76:in `timeout'
from c:/ruby/lib/ruby/1.8/net/http.rb:560:in `connect'
from c:/ruby/lib/ruby/1.8/net/http.rb:553:in `do_start'
from c:/ruby/lib/ruby/1.8/net/http.rb:542:in `start'
from c:/ruby/lib/ruby/1.8/net/http.rb:379:in `get_response'
from c:/ruby/lib/ruby/1.8/net/http.rb:337:in `get_print'
from ruby2.rb:3
答案 0 :(得分:0)
代码看起来正确并在我的机器上按预期运行 - 您确定在您的机器上正确设置了dns吗?你需要一个代理来进行网络电话吗?你能在浏览器中打开网址吗?
答案 1 :(得分:0)
我没有,我得到了答复。你当时在线吗?
答案 2 :(得分:0)
尝试对问题进行三角测量。您可以通过浏览器访问网站,但不能访问代码:
gem server
以运行一个不错的小型Web服务器。http://localhost:8808
。你应该看到一个格式很好的页面。<CNTRL>+C
终止gem服务器。那时你已经证明Net :: HTTP在本地工作并且你已经完成了,除了弄清楚机器的外部设备让你看不到“example.com”。require 'open-uri'
添加到代码中的需求列表中,并将HTTP :: Net行替换为puts open('http://localhost:8808').read
,然后再次尝试运行代码。此时您可以通过编辑为原始问题添加更多详细信息。
另一个想法浮现在脑海中:你在Windows上。您是否启用了任何网络安全性,例如防火墙?可能是因为它阻止Ruby创建连接但允许你的浏览器?