2011-02-04 52 views
0

我还在开始与Lua,并想写一个(相对)简单的代理使用它。使用Lua编写Proxy/Caching服务器!

这是我想到达:

  1. 侦听端口。
  2. 接受连接。
  3. 由于这是一个代理,我期待HTTP(Get/Post等)/ HTTPS/FTP /来自我的浏览器的任何请求。
  4. 检查请求(仅提取主机和端口信息?)
  5. 创建一个新的套接字并连接到请求中指定的主机。
  6. 传递确切的请求,因为它收到,与POST数据和所有。
  7. 接收响应(标题/正文/其他任何内容..)并响应初始请求。
  8. 关闭连接?我认为Keep-Alive不应该得到尊重?

我意识到这不应该是微不足道的,但我有很多麻烦设置使用LuaSockets或Copas - 如何接收整个请求?继续接收,直到我扫描\ r \ n \ r \ n?那我该如何提取发布数据?和身体?或接受“下载”文件?我读到了有关“汇”的信息,但是我承认这些信息大部分都不理解,所以或许我应该阅读更多内容。

万一它很重要,我正在使用LuaForWindows在windows计算机上工作,而我对Lua还是比较新的。尽管如此,虽然表很简单:)

我发现lua-http,但它似乎已经合并到Xavante(我没有找到任何版本的lua 5.1和LuaForWindows),不知道它是否它让我的生活更轻松?

预先感谢任何提示,指针库/源我应该看等:)

回答

0

不那么容易,因为你可能认为。代理请求和服务器请求是不同的。在rfc2616中,您可以看到,在查询代理时,客户端会包含请求文档的绝对URL,而不是通常的相对路径。

因此,作为代理,您必须解析输入请求,修改它们,查询相应的服务器并返回响应。

因为身体长度取决于各种参数(方法,内容编码等),解析输入请求相当复杂。

+0

你说得对,谢谢你指出,我没有想到它是诚实的,但我仍然不确定如何继续?要仔细看看lua-http-parser,但我确实希望能够更轻松地编写代码:“获取请求+所有数据 - >转发,接收响应+数据 - >转发” – Cyclonus 2011-02-04 14:25:55

+0

一旦您能够解析请求,你完成了很多。 – 2011-02-04 15:30:27