Ruby 1.8.7 で認証proxiを越える: open-uri.rb にパッチをあてる方法
Mac/Linux 用の配布用実行ファイルを作るには Ruby 1.8.7 を使わざるを得ません。で、open-uri で認証プロクシサーバーを越えようとしても動きません。調べてみると open-uri.rb が未完成状態なんですね!
ネットで調べると、次のように書けば動きそうな感じがしたのですが・・・。
options = {:proxy => proxy_host,:http_basic_authentication => [proxy_user,proxy_passwd], "User-Agent" => useragent}
そこで open-uri.rb を追ってみると、確かに動かない仕様になっています。
パッチの当て方
Ruby 1.8.7 の open-uri.rb の215行目付近は次のように書いてあります。
if proxy klass = Net::HTTP::Proxy(proxy.host, proxy.port) end
これを次のように書き換えます。
if proxy if options.include? :http_basic_authentication user, pass = options[:http_basic_authentication] klass = Net::HTTP::Proxy(proxy.host, proxy.port,user,pass) else klass = Net::HTTP::Proxy(proxy.host, proxy.port) end end
因みに Ruby 1.9.3 では?
Ruby 1.9.3 では上記の options 指定では動きません。次のように書く必要があります。
options = {:proxy_http_basic_authentication => [proxy_host,proxy_user,proxy_passwd], "User-Agent" => useragent}