ドメイン名つきでプロキシを通す

昨日、SICPの勉強会でお会いした人と「http_proxy の指定方法で困っている」の件で少し話をしたので、ちょっと試してみた。
ローカルにプロキシをたてて、

# export http_proxy="http://hoge\\fuga:password@127.0.0.1:8001/"
# gem install rails

とかやってみたところ、URI::InvalidURIErrorというエラーになった。これを出しているのはuri/common.rbで、該当する表現USERINFOは(?:[#{UNRESERVED};:&=+$,]|#{ESCAPED})*となっており、バックスラッシュが含まれていない。
ESCAPEDが入っているので試しにhoge%5cfuga:password@にしてみたところ、InvalidURIErrorは出なくなったが、HTTPヘッダをダンプしたらhoge%5cfuga:password(をbase64エンコードしたもの)がそのまま入っていた。


ではUSERINFOでバックスラッシュを許容するように変えてみたら、ということで

USERINFO = "(?:[#{UNRESERVED};:&=+$,\\\\]|#{ESCAPED})*"

に変更してみたところ、これだとヘッダを見る限りでは動作しているようだ。


RFC的には、http_proxyにはパーセントエンコーディングしたものを設定して、Proxy-Authorizationを送信する際にパーセントデコードしてからbase64エンコードするのが正しいんじゃなかろうか。
ユーザー名はともかく、パスワードには記号を入れるケースはありそうなので、パーセントデコードしなければならない気もするが…。そういやIEではuser:password@の形式がサポートされなくなってたのだった。フィッシング詐欺対策だったのか。