Побудуйте простий проксі


9

Зробіть найкоротший проксі-сервер.

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

Клієнт:

  • Введення: номер порту (32-бітове ціле число) (,) або (пробіл) URL (див. Тестові випадки)
  • Вихід: html-джерело URL-адреси

Сервер:

  • Вхід: порт для прослуховування (32-бітове ціле число)
  • Вихід: REC, коли вхід отримується від клієнта, OK, коли закінчується надсилання джерела html клієнту.

Правила

  • Ви можете зробити або повну програму, або функції на інтерпретованій мові .
  • Введення приймається через 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

@Nemo: що ви маєте на увазі багаторазове використання? (але я вважаю, що відповідь "так, це може бути одним ударом")
Eelvex

@Nemo: так, це нормально, якщо сервер виходить після добре обробленого запиту.
Ельвенкс

Відповіді:


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) при використанні цієї оболонки?
Будь ласка, продовжуйте

@idealmachine: Ті, що знаходяться у другому рядку клієнта, я вважаю потрібними, я лише повертаю колонтитул назад із пошуку StackExchange. Інші, в чому я не впевнений, здаються, що вони працюють без них. Я не дуже багато сценаріїв в zsh.
Nemo157

Так, завиток слід заглушити (оновлені правила для уточнення).
Енадкс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.