Создайте простой прокси

9

Сделай самый короткий прокси сервер.

Технические характеристики входа / выхода

Клиент:

  • Ввод: номер порта (32-разрядное целое) (,) или (пробел) URL (см. Контрольные примеры)
  • Вывод: html источник URL

Сервер:

  • Вход: порт для прослушивания (32-разрядное целое)
  • Вывод: REC, когда ввод получен от клиента, OK, когда закончена отправка источника HTML клиенту.

правила

  • Вы можете сделать полную программу или функции на устном языке .
  • Ввод осуществляется через стандартный ввод или в качестве аргументов .
  • Ваш код должен работать только для данных тестов (больше необязательно, меньше недействительно).
  • Выходные данные клиента должны быть такими же, как и при просмотре исходного кода из браузера.
  • Сервер может завершить работу после каждого обработанного запроса (т. Е. Не должен быть постоянным / daemon)
  • ( редактировать ) Любой другой ввод / вывод, кроме указанного, запрещен.

Тестовые случаи (входные данные клиента)

  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.

Eelvex
источник
Нужно ли использовать сервер? Или это может быть одноразовый прокси?
Nemo157
@Nemo: что вы имеете в виду многоразового использования? (но я полагаю, что ответ «да, это может быть один выстрел»)
Eelvex
@Nemo: да, это нормально, если сервер завершает работу после хорошо обработанного запроса.
Eelvex

Ответы:

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"
Nemo157
источник
Прошло много времени с тех пор, как я последний раз использовал zsh, но разве вы не можете избавиться от всех кавычек (необходимых для bash) при использовании этой оболочки?
Пожалуйста, встаньте
@idealmachine: те, что на второй строке клиента, я считаю необходимыми, я только возвращал нижний колонтитул из поиска StackExchange. Другие, в которых я не уверен, похоже, работают без них. Я на самом деле не делаю много скриптов в Zsh.
Nemo157
Да, локон должен быть отключен (уточненные правила уточняют).
Eelvex