Créez un proxy simple

9

Créez le serveur proxy le plus court.

Spécifications d'entrée / sortie

Client:

  • Entrée: un numéro de port (entier 32 bits) (,) ou (espace) une URL (voir cas de test)
  • Sortie: source html de l'url

Serveur:

  • Entrée: port à écouter (entier 32 bits)
  • Sortie: REC lorsque l'entrée est reçue du client, OK lorsque vous avez fini d'envoyer la source html au client.

Règles

  • Vous pouvez créer un programme complet ou des fonctions dans un langage interprété .
  • L'entrée est prise via stdin ou donnée comme arguments .
  • Votre code doit fonctionner uniquement pour les cas de test donnés (plus est facultatif, moins n'est pas valide).
  • La sortie client doit être la même que celle que vous obtenez lorsque vous "visualisez la source" à partir d'un navigateur.
  • Le serveur peut se fermer après chaque requête traitée (c'est-à-dire qu'il n'a pas besoin d'être persistant / démon)
  • ( modifier ) Toute autre entrée / sortie que celle spécifiée est interdite.

Cas de test (entrées client)

  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

où N i sont des nombres entiers aléatoires compris entre 1 et 2048.

Eelvex
la source
Le serveur doit-il être réutilisable? Ou peut-il s'agir d'un proxy one-shot?
Nemo157
@Nemo: que voulez-vous dire réutilisable? (mais je suppose que la réponse est "oui, cela peut être un coup unique")
Eelvex
@Nemo: oui, c'est ok si le serveur se ferme après une requête bien gérée.
Eelvex

Réponses:

4

ZSH - 57 + 42 caractères

Serveur:

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

Client:

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

Usage:

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
la source
Cela fait un moment que je n'ai pas utilisé zsh pour la dernière fois, mais ne pouvez-vous pas vous débarrasser de toutes les citations (nécessaires pour bash) lorsque vous utilisez ce shell?
PleaseStand
@idealmachine: Celles de la deuxième ligne du client sont nécessaires, je ne récupérais que le pied de page de la recherche StackExchange. Les autres, je n'en suis pas sûr, semblent fonctionner sans eux. Je ne fais pas vraiment beaucoup de scripts en zsh.
Nemo157
Oui, la boucle doit être réduite au silence (règles mises à jour pour clarifier).
Eelvex