単純なプロキシを構築する


9

最短のプロキシサーバーを作成します。

入出力仕様

クライアント:

  • 入力:ポート番号(32ビット整数)(、)または(スペース) url(テストケースを参照)
  • 出力:URLのHTMLソース

サーバ:

  • 入力:待機するポート(32ビット整数)
  • 出力:クライアントから入力を受け取ったときにREC、HTMLソースをクライアントに送信し終えたらOK

ルール

  • あなたは、どちらかのことがあり、完全なプログラムまたはインタプリタ言語の関数を
  • 入力はstdinを通じて取得されるか、引数として指定されます
  • コードは、指定されたテストケースに対してのみ機能する必要があります(詳細はオプションで、詳細は無効です)。
  • クライアントの出力は、ブラウザから「ソースを表示」したときに得られるものと同じでなければなりません。
  • リクエストが処理されるたびにサーバーが終了する場合があります(つまり、永続的/デーモンである必要はありません)。
  • 編集)指定されたもの以外の入出力は禁止されています。

テストケース(クライアント入力)

  1. N 1 https://stackoverflow.com/
  2. N 2 http://en.wikipedia.org/wiki/Proxy_server
  3. N 3 http://stackexchange.com/search?q=code+golf

ここで、N iは1〜2048のランダムな整数です。


サーバーは再利用可能である必要がありますか?それとも、ワンショットプロキシにすることができますか?
Nemo157 2011年

@Nemo:再利用可能とはどういう意味ですか?(しかし、答えは「はい、それはワンショットになる可能性があります」と思います)
Eelvex

@Nemo:はい、適切に処理されたリクエストの後でサーバーが終了しても問題ありません。
Eelvex 2011年

回答:


4

ZSH-57 + 42文字

サーバ:

s=$(nc -l $1)
echo REC
curl -s $s|nc 127.0.0.1 $1
echo OK

クライアント:

echo $2|nc 127.0.0.1 $1
echo "$(nc -l $1)"

使用法:

sudo zsh server.zsh 123

sudo zsh client.zsh 123 http://stackoverflow.com/
sudo zsh client.zsh 123 http://en.wikipedia.org/wiki/Proxy_server
sudo zsh client.zsh 123 "http://stackexchange.com/search?q=code+golf"

私が最後にzshを使用してから久しぶりですが、そのシェルを使用するときに(bashに必要な)すべての引用符を取り除くことはできませんか?
PleaseStand

@idealmachine:クライアントの2行目の必要なものは、StackExchange検索からフッターのみを取得していました。他のものは、よくわかりませんが、それらがなくても機能するようです。私は実際にはzshであまりスクリプトを実行しません。
Nemo157 2011年

はい、カールは沈黙する必要があります(明確にするためにルールを更新しました)。
Eelvex 2011年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.