2011-02-04 9 views
0

私はまだLuaを使い始めていて、それを使って(比較的)簡単なプロキシを書いてみたいです。Luaを使用してプロキシ/キャッシングサーバーを作成する!

これは私が取得したいものです。

  1. は、ポート上で聞いてください。
  2. 接続を受け入れます。
  3. これはプロキシなので、私のブラウザからのリクエストは何でもHTTP(Get/Post etc ..)/ HTTPS/FTP /を期待しています。
  4. 要求を検査する(ホストとポートの情報を抽出するだけです)
  5. 新しいソケットを作成し、要求で指定されたホストに接続します。
  6. 受信した正確な要求をPOSTデータとすべてで中継します。
  7. 応答(ヘッダー/本文/その他)を受信し、最初の要求に応答します。
  8. 接続を閉じますか?キープ・アライブは尊重されるべきではないと思いますか?

私はそれが些細なことではないことを認識していますが、私はLuaSocketsまたはCopasを使用してこれを設定するのに苦労しています。 \ r \ n \ r \ nをスキャンするまで受信を続けますか?その後、投稿データをどのように取得するのですか?身体?または、「ダウンロード」ファイルを受け入れますか?私は "シンク"について読んだが、それが意味することのほとんどを理解していなかったので、もっと読むべきだろうか?

重要な場合は、LuaForWindowsを使用しているWindowsマシンで作業していますが、まだLuaを初めて使用しています。これまでのところ、テーブルは驚くべきものです:)

私はlua-httpを発見しましたが、Xavanteにマージされているようです(そして、lua 5.1とLuaForWindowsのバージョンは見つかりませんでした。私の人生は楽になりますか?私は、などを見てしなければならない任意のヒント、ポインタ、ライブラリ/ソースを事前に

感謝:)

答えて

0

ないあなたが思うかもしれほど簡単。プロキシへのリクエストとサーバーへのリクエストは異なります。 rfc2616には、プロキシを照会するときに、クライアントは通常の相対ドキュメントではなく、要求されたドキュメントの絶対URLを含むことがわかります。

プロキシとして、要求を解析して変更し、適切なサーバーに問い合わせて応答を返す必要があります。

ボディの長さはさまざまなパラメータ(メソッド、コンテンツのエンコーディングなど)に依存するため、リクエストの解析は非常に複雑です。

+0

あなたはそうだと指摘してくれて正直であるとは思っていませんでしたが、どうやって進めるのかまだ分かりません。 lua-http-parserを詳しく見ていきますが、実際には "リクエストを取得+すべてのデータ - >転送し、レスポンス+データ - >転送する"という簡単なコードを期待していました。 – Cyclonus

+0

リクエストを解析できたら、あなたのほとんどは完了しました。 –

0

lua-http-parserを試してみてください。

+0

ありがとう!面白そうだし、リクエスト/レスポンスの構文解析をはるかに単純化できるようだ。 – Cyclonus

関連する問題