2010-09-07[n年前へ]
■プロキシ認証ダイアログの謎
以前から悩んでいる謎があります。それは、httpプロキシの認証動作です。ある頃から、いくつかの環境、いくつかのユーザが外部ネットワークへのProxyを介した接続ができなくなっていることに気が付きました。いくつかの環境下、たとえば、いくつかのバージョンのIEを使っている場合や、PC自身が持つNATを介してProxyサーバに接続する設定のPCの(w3mを除く)WEBブラウザを使用している場合、ユーザ名やパスワードに/や@や&や…といった、unsafeな文字が使われている場合にProxy認証が通らないことがある、と気付いたのです。Proxy認証のためのダイアログは出るのですが、認証エラーが発生してしまうのです。
面白いことに、設定ファイル中にProxy認証を、たとえばhttp://ユーザ名:パスワード@proxy.hoge.org:8080といった形で書いてやると、(コマンドライン上のWEBブラウザーである)W3Mやapt-getやgemといったものは、すべて問題なくProxy認証をパスし、接続することができます。しかし、WEBブラウザのダイアログを介してユーザ名やパスワードを入力すると、どうしてもProxy認証でエラーが出てしまうのです。
そこで、とりあえずRubyで(下のような)Proxyサーバを書き、Firefox<->RubyProxy<->Proxy Server<->Internetという具合で接続をさせることにしました。
require 'webrick' require 'webrick/httpproxy' require 'uri' user=URI.encode 'usre' passwd=URI.encode 'passwd' s = WEBrick::HTTPProxyServer.new( :BindAddress => '127.0.0.1', :Port => 3000, :ProxyVia => false, :ProxyURI => URI.parse( 'http://'+user+':'+passwd'+ '@proxy.hoge:8080/' )) Signal.trap('INT') { s.shutdown } s.start
と、ここまで書いて気づきましたが、WEBブラウザの接続設定に、最初から URI.encode( 'http://user:hoge@proxy.hoge:8080/' )の結果を入力してやれば、こんな多段Proxyにしなくても良いような気がしてきました。
ProxyのBASIC認証ダイアログに入れた文字は、どのように(どのソフトウェアにより)処理されていくのでしょうか?