Construye un proxy simple

9

Haga el servidor proxy más corto.

Especificaciones de entrada / salida

Cliente:

  • Entrada: un número de puerto (entero de 32 bits) (,) o (espacio) una url (ver casos de prueba)
  • Salida: fuente html de la url

Servidor:

  • Entrada: puerto para escuchar (entero de 32 bits)
  • Salida: REC cuando se recibe la entrada del cliente, OK cuando termina de enviar la fuente html al cliente.

Reglas

  • Puede hacer un programa completo o funciones en un lenguaje interpretado .
  • La entrada se toma a través de stdin o se proporciona como argumento .
  • Su código tiene que funcionar solo para los casos de prueba dados (más es opcional, menos no es válido).
  • El resultado del cliente debe ser el mismo que el que obtiene cuando "ve el código fuente" desde un navegador.
  • El servidor puede salir después de cada solicitud manejada (es decir, no tiene que ser persistente / demonio)
  • ( editar ) Se prohíbe cualquier otra entrada / salida que la especificada.

Casos de prueba (entradas del cliente)

  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

donde N i son enteros aleatorios entre 1 y 2048.

Eelvex
fuente
¿El servidor tiene que ser reutilizable? ¿O puede ser un proxy de una sola vez?
Nemo157
@Nemo: ¿qué quieres decir con reutilizable? (pero supongo que la respuesta es "Sí, puede ser un one-shot")
Eelvex
@Nemo: sí, está bien si el servidor sale después de una solicitud bien manejada.
Eelvex

Respuestas:

4

ZSH - 57 + 42 caracteres

Servidor:

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

Cliente:

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

Uso:

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
fuente
Ha pasado un tiempo desde la última vez que usé zsh, pero ¿no puedes deshacerte de todas las citas (necesarias para bash) cuando usas ese shell?
favor
@idealmachine: creo que los que están en la segunda línea del cliente son necesarios, solo estaba recuperando el pie de página de la búsqueda de StackExchange. Sin embargo, los otros, no estoy seguro, parecen funcionar sin ellos. Realmente no hago muchos scripts en zsh.
Nemo157
Sí, el rizo debe silenciarse (reglas actualizadas para aclarar).
Eelvex