在局域网内有proxy的情况下,如何使用gem和open-uri

我在局域网内,需要通过proxy才能访问外网, 并且还需要用户认证。
刚才搞了半天,又是google又是看文档,最后还是看gem代码搞定的,真不容易,现在和大家share一下, 以备不时之需。


export HTTP_PROXY=http://user:[email protected]:1080
gem update

这里uri有些字符需要escape一下,建议用ruby的URI.escape处理一下
require 'uri'
URI.escape(raw_uri)

按照gem的帮助说的
gem update -p http://user:[email protected]:1080
总是提示
ERROR:  While executing gem ... (NoMethodError)
    undefined method `[]=' for #<Gem::ConfigFile:0xb73e5b18>
没看源码,不知道咋回事



然后是open-uri,原来一直以为不支持proxy需要认证的情况,后来发现原来rubygems/open-uri是支持的
require 'rubygems/open-uri'
open('www.google.cn',
:proxy_http_basic_authentication => ["http://proxy.foo.com:8000/", "proxy-user", "proxy-password"]
)

似乎这个open-uri应该取代ruby自带的那个好些

你可能感兴趣的:(Google,Ruby,rubygems)