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.


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"

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.