2013-07-17 28 views
2

我试图通过Ruby发出HTTP请求。当运行下面的代码: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)' 

这可能是代理相关的,但我不知道。我该如何解决这个问题?

+1

您的机器是否连接到互联网?你有没有尝试过另一个Ruby? –

+0

“这可能与代理有关”,所以请告诉我们,您是否通过代理运行? –

+0

是的,我。我尝试过使用httpclient库做同样事情的其他方式,在这种情况下,它给了我一个arg错误,指出代理:8080无效。我尝试用手动代理设置覆盖它,但它总是返回相同的错误消息。 – user472875

回答

1

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

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

我可能无法直接覆盖HTTP_PROXY。另外,我不能在构造函数中覆盖它(这是一个错误?)。 client = HTTPClient.new(:proxy =>'http:// myproxy:8080') ArgumentError:不受支持的代理服务器:8080 – user472875

+0

我试过一种解决方法:由于ruby将所有环境变量存储在散列表中ENV,我只是在那里覆盖它,并重新httpclient代码。没有更多的问题。 – user472875

1

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

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

相关问题