Zbuduj prosty serwer proxy

9

Zrób najkrótszy serwer proxy.

Specyfikacje wejścia / wyjścia

Klient:

  • Dane wejściowe: numer portu (32-bitowa liczba całkowita) (,) lub (spacja) adres URL (patrz przypadki testowe)
  • Dane wyjściowe: źródło HTML adresu URL

Serwer:

  • Wejście: port do nasłuchiwania (liczba całkowita 32-bitowa)
  • Wyjście: REC po otrzymaniu danych wejściowych od klienta, OK po zakończeniu wysyłania źródła HTML do klienta.

Zasady

  • Możesz stworzyć kompletny program lub funkcje w tłumaczonym języku .
  • Dane wejściowe są pobierane przez stdin lub podawane jako argumenty .
  • Twój kod musi działać tylko dla podanych przypadków testowych (więcej jest opcjonalne, mniej jest nieprawidłowe).
  • Dane wyjściowe klienta muszą być takie same, jak w przypadku „źródła” z przeglądarki.
  • Serwer może wyjść po każdym obsłużonym żądaniu (tzn. Nie musi być trwały / demon)
  • ( edycja ) Wszelkie inne wejścia / wyjścia inne niż określone są zabronione.

Przypadki testowe (dane wejściowe klienta)

  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

gdzie N i są losowymi liczbami całkowitymi od 1 do 2048.

Eelvex
źródło
Czy serwer musi być wielokrotnego użytku? A może może to być jednorazowy serwer proxy?
Nemo157
@Nemo: co masz na myśli? (ale przypuszczam, że odpowiedź brzmi „tak, to może być jeden strzał”)
Eelvex
@Nemo: tak, jest ok, jeśli serwer zakończy pracę po dobrze obsłużonym żądaniu.
Eelvex

Odpowiedzi:

4

ZSH - 57 + 42 znaków

Serwer:

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

Klient:

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

Stosowanie:

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"
Nemo157
źródło
Minęło trochę czasu, odkąd ostatnio używałem Zsh, ale czy nie możesz pozbyć się wszystkich cytatów (niezbędnych do bash) podczas korzystania z tej powłoki?
wstać
@idealmachine: Te w drugim wierszu klienta, które moim zdaniem są konieczne, odzyskiwałem stopkę tylko z wyszukiwania StackExchange. Te inne, choć nie jestem pewien, wydają się jednak działać bez nich. Tak naprawdę nie robię dużo skryptów w Zsh.
Nemo157
Tak, curl powinien zostać wyciszony (zaktualizowane zasady w celu wyjaśnienia).
Eelvex