人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

ローカルプロキシとして使う、HTTPProxyサーバをC#で作成しようと思ってます。

・Proxyサーバに必要なコマンドなどがまとめられたページなど、サーバを作る際に役に立ちそうなページ
・Proxyサーバ実装のチュートリアルみたいなページ(C#でなくても可)
・C#でかれたたProxyサーバのソース

RubyのWEBrickでやっとけとかProxomitronのフィルターでやっとけとかは無しでお願いします。

●質問者: shun262
●カテゴリ:コンピュータ インターネット
✍キーワード:C# Proxomitron Proxyサーバ Ruby WEBrick
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● furutanian
●60ポイント ベストアンサー

HTTP Proxy の動作は基本的に HTTP サーバと同じで、HTTP プロトコルのリクエストを受け付け、代理(Proxy)として HTTP サーバに接続し、受け取った結果をクライアントに返すことになりますので「必要なコマンド」は「HTTP リクエスト」と同じということになります。

通常の HTTP リクエストは以下のような形で、HTTP サーバに到着しますが、

「GET /index.html HTTP/1.0」

ブラウザの Proxy 機能をオンにすると、HTTP リクエストは以下のような形で、Proxy サーバに到着するようになります。

「GET http://www.example.com/index.html HTTP/1.0」

Proxy は、URL 部分を、アドレスとパスに分解、「www.example.com」のアドレスで待っている HTTP サーバに接続、「GET /index.html HTTP/1.0」という要求を出して、結果を受領、クライアントに返します。

C# ではなく Perl ですが、以下の場所に Proxy サーバのサンプルがあります。

http://x68000.q-e-d.net/~68user/net/http-proxy.html

勘所は以下の Proxy リクエストを解析、HTTP リクエストに変換する部分です。

 193: if ( m|^([A-Z]+) [a-zA-Z]+://(.*?)/(.*?) (HTTP/\d\.\d)$|i ){
 197: ($method, $host, $path, $proto_ver) = ($1, $2, $3, $4);
 208: $new_req = "$method /$path $proto_ver\r\n";

単純な正規表現で 4 つの要素に分解し、くっつけなおしているだけであり、一切「コマンド」としての扱いは行っていません。つまり、純粋な Proxy サーバには「コマンド」を理解する機能は不要なのです。

一応、HTTP リクエストは以下に一覧がありますが、事実上、PUT、POST、HEAD くらいしか利用されません。

http://www.7key.jp/nw/http1.html#request

もし、キャッシュ指向の Proxy サーバを作る場合、GET だけに着目して作れば十分でしょう。

◎質問者からの返答

HTTPProxy独自のコマンドってないんですね。

参考になります^^


2 ● lunlumo
●10ポイント

CONNECTはプロクシ用のメソッドですね。HTTPのみに対応したプロクシもどきであれば,furutanianさんの示された方法で十分かとは思いますが。

http://www.studyinghttp.net/method#CONNECT

◎質問者からの返答

ありがとうございます

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ