HTTP请求错误:名称或服务未知

时间:2013-07-17 19:07:49

标签: ruby jruby

我正在尝试通过Ruby发出HTTP请求。运行以下代码时:

require "net/http"
require "uri"

uri = URI.parse("http://google.com/")

# Will print response.body
Net::HTTP.get_print(uri)

我收到以下错误:

SocketError: initialize: name or service not known
        from org/jruby/ext/socket/RubyTCPSocket.java:129:in `initialize'
        from org/jruby/RubyIO.java:1179:in `open'
        from c:/jruby-1.7.3/lib/ruby/1.9/net/http.rb:762:in `connect'
        from org/jruby/ext/timeout/Timeout.java:105:in `timeout'
        from c:/jruby-1.7.3/lib/ruby/1.9/net/http.rb:762:in `connect'
        from c:/jruby-1.7.3/lib/ruby/1.9/net/http.rb:755:in `do_start'
        from c:/jruby-1.7.3/lib/ruby/1.9/net/http.rb:744:in `start'
        from c:/jruby-1.7.3/lib/ruby/1.9/net/http.rb:454:in `get_response'
        from c:/jruby-1.7.3/lib/ruby/1.9/net/http.rb:412:in `get_print'
        from (irb):29:in `evaluate'
        from org/jruby/RubyKernel.java:1066:in `eval'
        from org/jruby/RubyKernel.java:1409:in `loop'
        from org/jruby/RubyKernel.java:1174:in `catch'
        from org/jruby/RubyKernel.java:1174:in `catch'
        from c:/jruby-1.7.3/bin/irb:13:in `(root)'

这可能与代理相关,但我不确定。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

Ruby将自动使用环境变量中指定的HTTP代理。

EXPORT http_proxy=http://foo.bar:8080/
ruby your_http_script.rb

答案 1 :(得分:1)

同样的事发生在我身上。没有使用代理。

原因是我没有以root身份运行,/etc/resolv.conf没有读取权限给root以外的任何人。添加读取权限解决了主机解决问题。