使用Lua编写代理/缓存服务器!

时间:2011-02-04 08:28:19

标签: http sockets proxy lua

我还在开始使用Lua,并希望使用它编写一个(相对)简单的代理。

这就是我想要达到的目的:

  1. 收听端口。
  2. 接受连接。
  3. 由于这是一个代理,我期待HTTP(Get / Post等等)/ HTTPS / FTP /来自浏览器的任何请求。
  4. 检查请求(只是提取主机和端口信息?)
  5. 创建一个新套接字并连接到请求中指定的主机。
  6. 使用POST数据和所有内容继续接收收到的确切请求。
  7. 收到回复(标题/正文/其他任何内容......)并回复初始请求。
  8. 关闭连接?我认为不应该尊重Keep-Alive?
  9. 我意识到这不应该是微不足道的,但是我在使用LuaSockets或Copas进行设置时遇到了很多麻烦 - 我如何收到整个请求?继续接收,直到我扫描\ r \ n \ r \ n?那么如何提取帖子数据?和身体?或者接受“下载”文件?我读到了关于“下沉”的内容,但不可否认的是,大部分内容并不理解,所以也许我应该阅读更多内容了?

    如果它很重要,我正在使用LuaForWindows在Windows机器上工作,而且我仍然是Lua的新手。到目前为止爱它,桌子简直太棒了:))

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

    提前感谢任何提示,指针,库/来源我应该关注等等:)

2 个答案:

答案 0 :(得分:0)

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

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

解析请求是非常复杂的,因为主体长度取决于各种参数(方法,内容编码等)。

答案 1 :(得分:0)

您可以尝试使用lua-http-parser