Erstellen Sie einen einfachen Proxy

9

Machen Sie den kürzesten Proxyserver.

Eingangs- / Ausgangsspezifikationen

Klient:

  • Eingabe: eine Portnummer (32-Bit-Ganzzahl) (,) oder (Leerzeichen) eine URL (siehe Testfälle)
  • Ausgabe: HTML-Quelle der URL

Server:

  • Eingang: Port zum Abhören (32-Bit-Ganzzahl)
  • Ausgabe: REC, wenn die Eingabe vom Client empfangen wird, OK, wenn das Senden der HTML-Quelle an den Client abgeschlossen ist.

Regeln

  • Sie können entweder ein vollständiges Programm oder Funktionen in einer interpretierten Sprache erstellen .
  • Die Eingabe erfolgt über stdin oder wird als Argument angegeben .
  • Ihr Code muss nur für die angegebenen Testfälle funktionieren (mehr ist optional, weniger ist ungültig).
  • Die Client-Ausgabe muss mit der Ausgabe übereinstimmen, die Sie erhalten, wenn Sie die Quelle in einem Browser "anzeigen".
  • Der Server kann nach jeder bearbeiteten Anforderung beendet werden (dh er muss nicht persistent / daemon sein).
  • ( Bearbeiten ) Jede andere Eingabe / Ausgabe als angegeben ist verboten.

Testfälle (Client-Eingaben)

  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

wobei N i zufällige ganze Zahlen zwischen 1 und 2048 sind.

Eelvex
quelle
Muss der Server wiederverwendbar sein? Oder kann es ein One-Shot-Proxy sein?
Nemo157
@Nemo: was meinst du wiederverwendbar? (aber ich nehme an, die Antwort lautet "Ja, es kann ein One-Shot sein")
Eelvex
@Nemo: Ja, es ist in Ordnung, wenn der Server nach einer gut bearbeiteten Anfrage beendet wird.
Eelvex

Antworten:

4

ZSH - 57 + 42 Zeichen

Server:

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)"

Verwendungszweck:

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
quelle
Es ist schon eine Weile her, seit ich zsh das letzte Mal verwendet habe, aber können Sie nicht alle Anführungszeichen (die für Bash erforderlich sind) entfernen, wenn Sie diese Shell verwenden?
PleaseStand
@idealmachine: Diejenigen in der zweiten Zeile des Clients, die ich für notwendig halte, haben nur die Fußzeile von der StackExchange-Suche zurückbekommen. Die anderen, bei denen ich mir nicht sicher bin, scheinen jedoch ohne sie zu funktionieren. Ich mache nicht wirklich viel Scripting in zsh.
Nemo157
Ja, Curl sollte zum Schweigen gebracht werden (aktualisierte Regeln zur Verdeutlichung).
Eelvex