4

打开失败:

irb(main):001:0> require 'open-uri'
=> true
irb(main):002:0> open("http://www.google.com")
RuntimeError: Non-HTTP proxy URI: 
    from /usr/lib/ruby/1.8/open-uri.rb:203:in `open_http'
    from /usr/lib/ruby/1.8/open-uri.rb:616:in `buffer_open'
    from /usr/lib/ruby/1.8/open-uri.rb:164:in `open_loop'
    from /usr/lib/ruby/1.8/open-uri.rb:162:in `catch'
    from /usr/lib/ruby/1.8/open-uri.rb:162:in `open_loop'
    from /usr/lib/ruby/1.8/open-uri.rb:132:in `open_uri'
    from /usr/lib/ruby/1.8/open-uri.rb:518:in `open'
    from /usr/lib/ruby/1.8/open-uri.rb:30:in `open'
    from (irb):2

但是,wget() 有效...

root@pierr-desktop:/work/web/yy# wget www.google.com
--2010-11-14 20:00:39--  http://www.google.com/
Resolving www.google.com... 72.14.203.104, 72.14.203.99
Connecting to www.google.com|72.14.203.104|:80... connected.
HTTP request sent, awaiting response... 302 Found
......... 

2010-11-14 20:00:40 (47.7 KB/s) - `index.html' saved [9097]

我是否必须设置代理但我不知道正确的代理信息..

4

2 回答 2

5

如果在环境中设置了 Open-URI,则它会从环境中获取代理,或者您可以在打开连接时定义它,或者如果在环境中设置,甚至禁用代理:

# The environment variables such as http_proxy, https_proxy and ftp_proxy
# are in effect by default.  :proxy => nil disables proxy.

open("http://www.ruby-lang.org/en/raa.html", :proxy => nil) {|f|
  # ...
}

请参阅 Open-URI 文档

此外,您的 Ruby 似乎很旧:/usr/lib/ruby/1.8/. 如果它不是ruby -v至少 1.8.7 我建议安装RVM,然后使用它来安装当前的 Ruby (1.9.2) 或至少是最新的 1.8 版本 (1.8.7)。检查RVM Prerequisites页面,然后按照安装说明进行操作,包括关于修改帐户启动脚本的部分,然后阅读关于安装Ruby gems的部分。

我不建议通过 yum 或 apt 使用打包的 Ruby。它们不会是最新的,并且似乎缺少我们期望从库存 Ruby 源安装中获得的所有物质享受。RVM 使安装和管理多个 rubies 变得如此容易。

于 2010-11-14T21:08:41.683 回答
1

如果您为系统定义了代理设置,则可以使用以下方法进行检查:

1-检查文件/etc/wgetrchttp_proxy配置参数:

2-检查环境变量使用:echo $HTTP_PROXY

于 2010-11-14T12:16:43.960 回答