Construa um proxy simples


9

Crie o servidor proxy mais curto.

Especificações de entrada / saída

Cliente:

  • Entrada: um número de porta (número inteiro de 32 bits) (,) ou (espaço) uma url (consulte os casos de teste)
  • Saída: fonte html do URL

Servidor:

  • Entrada: porta a ser ouvida (número inteiro de 32 bits)
  • Saída: REC quando a entrada é recebida do cliente, OK quando terminar de enviar a fonte html para o cliente.

Regras

  • Você pode criar um programa completo ou funções em um idioma interpretado .
  • A entrada é obtida através de stdin ou fornecida como argumento .
  • Seu código deve funcionar apenas para os casos de teste fornecidos (mais é opcional, menos é inválido).
  • A saída do cliente deve ser a mesma do que você obtém quando "visualiza a fonte" de um navegador.
  • O servidor pode sair após cada solicitação tratada (ou seja, não precisa ser persistente / daemon)
  • ( editar ) É proibida qualquer outra entrada / saída além da especificada.

Casos de teste (entradas do 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

onde N i são números inteiros aleatórios entre 1 e 2048.


O servidor precisa ser reutilizável? Ou pode ser um proxy único?
Nemo157

@ Nemo: o que você quer dizer com reutilizável? (mas acho que a resposta é "sim, pode ser um one-shot")
Eelvex

@ Nemo: sim, tudo bem se o servidor sair após uma solicitação bem tratada.
Eelvex

Respostas:


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"

Já faz um tempo desde a última vez que usei o zsh, mas você não pode se livrar de todas as aspas (necessárias para o bash) ao usar esse shell?
PleaseStand

@idealmachine: Na segunda linha do cliente, acho que é necessário, eu estava apenas recuperando o rodapé da pesquisa StackExchange. Os outros, não tenho certeza, parecem funcionar sem eles. Eu realmente não faço muitos scripts no zsh.
Nemo157 13/03

Sim, a curvatura deve ser silenciada (regras atualizadas para esclarecer).
Eelvex
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.