dari88's diary

これから趣味にするプログラミング/PHP/javascript/kohana/CMS/web design/

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}