[Tokyo.pm] HTTP::Winder

Dan Kogai dankogai @ dan.co.jp
2002年 11月 7日 (木) 07:20:11 CST


弾です。執筆中の本もいよいよ追い込みです。

On Thursday, Nov 7, 2002, at 18:21 Asia/Tokyo, taguti wrote:
> HTTP::Winderを作成したきっかけは、こうです。
> 今運営しているサイトを何人かの人にデモする必要が出てきた
> のですが、このサイトはパスワードがかかっています。
> 数人にメールでURLを教えたいのですが、パスワードは教えたくない。
> 現行のシステムを触りたくない。
> パスワードを追加するProxyを作成して、そのProxyを
> 設定して閲覧するようにしてもいいんですが、ブラウザーにProxyを
> 設定するのはなんか面倒(と言われそう)。
> それで関係者には、
> "http://hostname:nnnn/hoo/bar.htm"
> をメールで教えて、
> 同じサーバーにポートnnnnをリスンし、ユーザーとパスワードを
> 追加してリクエストを
> "http://hostname/hoo/bar.htm"
> に出すものを作成しようと考えました。

こういう目的であれば、スピードにある程度目をつぶればこのように簡単にやってしまう方法があります(mod_perlを使えば結構速くでしょう)。

#!/usr/local/bin/perl -Tw

use strict;
no warnings qw(uninitialized);
use LWP::UserAgent;

# Change these

my @auth = qw(username password);
my $base = q(http://www.dan.co.jp/Echo);

# And leave the rest

my $uri = $base . $ENV{PATH_INFO};
my $ua  = LWP::UserAgent->new;
my $req = HTTP::Request->new('GET', $uri);
$req->authorization_basic(@auth);
my $res = $ua->request($req);
print $res->headers->as_string, "\n", $res->content;
__END__

これを例えばhttp://server/cgi-bin/rereq/ で呼べるようにしておいて、

http://server/cgi-bin/rereq/path/to/the/object/

に request を送ると、

http://username:password@www.dan.co.jp/Echo/path/to/the/object/

の内容を取ってきて(ヘッダー込みで)横流しするわけです。@auth と $base をカスタマイズすれば使いまわせます。


> 本当は別のサーバーにしたかったのですが、それはやり方が良く
> 判りませんでした。
> "TCP tunnel"に似たようなものを作りたかったのですが。
> で、こうゆうプログラムのことを何と呼ぶか判りますか?
> これもProxyでしょうか?

User Agent と Server の間に入るのですから、立派に Proxy です。

> 良く判らないので私はWinderとつけました。本当はSidewinderと
> したかったのですが、それだと長いので。(^_^;
> ストレートに80番に行くのではなく、別ポートに来たリクエストを
> 巻きついて(絡み付いて)80番に飛ばすもの、という意味です。

ちょっとわかりづらいですね。この程度の目的にわざわざlisten()するというのももったいないとも思います。逆にもっとしっかり派手にやるのであ 
れば、squidでredirectorを動かすという手もあります。

Dan the Man with Too Many Ways to Do It.




Tokyo-pm メーリングリストの案内