建立一个简单的代理


9

制作最短的代理服务器。

输入/输出规格

客户:

  • 输入:端口号(32位整数)(,)或(空格) URL(请参见测试用例)
  • 输出:URL的html源

服务器:

  • 输入:要侦听的端口(32位整数)
  • 输出:从客户端接收到输入时为REC,在将html源发送给客户端后为OK

规则

  • 您可以使用解释语言制作完整的程序功能
  • 输入通过stdin或作为参数给出。
  • 您的代码适用于给定的测试用例(更多是可选的,更少是无效的)。
  • 客户端输出必须与从浏览器“查看源代码”获得的输出相同。
  • 服务器可以在每个已处理的请求之后退出(即不必是持久的/守护程序)
  • 编辑)禁止指定以外的任何其他输入/输出。

测试用例(客户输入)

  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

其中N i是1到2048之间的随机整数。


服务器是否必须可重用?还是可以成为一次性代理?
2011年

@Nemo:可重复使用是什么意思?(但是我想答案是“是的,它可以是一个镜头”)
Eelvex

@Nemo:是的,如果服务器在处理完请求后退出,也可以。
Eelvex 2011年

Answers:


4

ZSH-57 + 42个字符

服务器:

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

客户:

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

用法:

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"

自从我上次使用zsh以来已经有一段时间了,但是使用该shell时,您能否摆脱所有引号(bash必需)?
PleaseStand

@idealmachine:我认为有必要在客户端的第二行,我只是从StackExchange搜索中获得页脚。我不确定,其他的似乎没有它们就可以工作。我实际上并没有在zsh中做太多脚本编写。
2011年

是的,应保持卷曲状态(更新规则以澄清)。
Eelvex 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.