Build a simple proxy

9

1

Make the shortest proxy server.

Input/Output Specifications

Client:

  • Input: a port number (32-bit integer) (,) or (space) a url (see test cases)
  • Output: html source of the url

Server:

  • Input: port to listen to (32-bit integer)
  • Output: REC when input is received from the client, OK when finished sending the html source to the client.

Rules

  • You may make either a complete program or functions in an interpreted language.
  • Input is taken through stdin or given as a arguments.
  • Your code has to work for the given test cases only (more is optional, less is invalid).
  • The client output has to be the same as with what you get when you "view source" from a browser.
  • The server may exit after each handled request (i.e does not have to be persistent/daemon)
  • (edit) Any other input/output than what specified, is forbidden.

Test cases (client inputs)

  1. N1 https://stackoverflow.com/
  2. N2 http://en.wikipedia.org/wiki/Proxy_server
  3. N3 http://stackexchange.com/search?q=code+golf

where Ni are random integers between 1 and 2048.

Eelvex

Posted 2011-03-13T20:55:13.560

Reputation: 5 204

Does the server have to be reusable? Or can it be a one-shot proxy? – Nemo157 – 2011-03-13T21:29:59.753

@Nemo: what do you mean reusable? (but I suppose the answer is "yes it can be a one-shot") – Eelvex – 2011-03-13T21:41:39.197

@Nemo: yes, it is ok if the server exits after a well handled request. – Eelvex – 2011-03-13T21:59:25.027

Answers

4

ZSH - 57 + 42 characters

Server:

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

Posted 2011-03-13T20:55:13.560

Reputation: 1 891

It's been a while since I last used zsh, but can't you get rid of all the quotes (necessary for bash) when using that shell? – PleaseStand – 2011-03-13T21:58:30.900

@idealmachine: The ones on the second line of the client I think are necessary, I was only getting the footer back from the StackExchange search. The other ones, I'm not sure about, seems to work without them though. I don't really do much scripting in zsh. – Nemo157 – 2011-03-13T22:05:55.993

Yes, curl should be silenced (updated rules to clarify). – Eelvex – 2011-03-13T22:31:22.880