hirax.net::inside out::2010年09月07日

最新記事(inside out)へ  |   年と月を指定して記事を読む(クリック!)

2010年8月 を読む << 2010年9月 を読む >> 2010年10月 を読む

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認証ダイアログに入れた文字は、どのように(どのソフトウェアにより)処理されていくのでしょうか?