ドメイン名つきでプロキシを通す
昨日、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@の形式がサポートされなくなってたのだった。フィッシング詐欺対策だったのか。