如何在ruby中使用net :: https

时间:2010-08-03 13:03:00

标签: ruby

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

3 个答案:

答案 0 :(得分:0)

代码看起来正确并在我的机器上按预期运行 - 您确定在您的机器上正确设置了dns吗?你需要一个代理来进行网络电话吗?你能在浏览器中打开网址吗?

答案 1 :(得分:0)

我没有,我得到了答复。你当时在线吗?

答案 2 :(得分:0)

尝试对问题进行三角测量。您可以通过浏览器访问网站,但不能访问代码:

  1. 从命令行窗口运行:gem server以运行一个不错的小型Web服务器。
  2. 使用以下命令打开浏览器窗口到gem服务器:http://localhost:8808。你应该看到一个格式很好的页面。
  3. 运行您的代码,调整URL以指向上面地址的gem服务器。你应该看到输出,可能很多。
  4. 如果获得输出,则可以使用<CNTRL>+C终止gem服务器。那时你已经证明Net :: HTTP在本地工作并且你已经完成了,除了弄清楚机器的外部设备让你看不到“example.com”。
  5. 如果没有输出,请将require 'open-uri'添加到代码中的需求列表中,并将HTTP :: Net行替换为puts open('http://localhost:8808').read,然后再次尝试运行代码。
  6. 如果你的Ruby网络堆栈中没有HTML滚动是错误的。
  7. 此时您可以通过编辑为原始问题添加更多详细信息。

    另一个想法浮现在脑海中:你在Windows上。您是否启用了任何网络安全性,例如防火墙?可能是因为它阻止Ruby创建连接但允许你的浏览器?