带范围拆分的Twisted Proxy

时间:2016-01-20 19:36:46

标签: python http proxy twisted

我想编写一个扭曲的代理,将非常大的GET请求拆分为较小的固定大小范围,并将其发送到另一个代理(使用Range:bytes)。另一个代理不允许大的响应,当响应很大时,它返回502。

如何实现扭曲的代理,在502错误时尝试将请求拆分为较小的允许块。文档很难遵循。我知道我需要扩展ProxyRequest,但是从那里我有点卡住了。

它不必是一个扭曲的代理,但它似乎很容易修改,我设法至少让它通过将connectTCP设置为我的代理(在ProxyRequest中)将未修改的请求转发到代理.parsed)。

1 个答案:

答案 0 :(得分:1)

实际上,扩展ProxyRequest可能不是最简单的方法。 ProxyRequest非常强烈地假设一个请求=一个响应,而在这里你想要将一个请求拆分成多个请求。

更简单的是简单地编写一个Resource实现,它可以执行您想要的操作,简单地说就是:

  1. render_GET中,使用Agent
  2. 构建一个URL以发出多个传出请求
  3. return NOT_DONE_YET
  4. 当每个响应都出现时,请在原始传入请求上调用request.write,然后发出带Range标题的新请求
  5. 最后当最后一个回复出现时,请在原始请求中致电request.finish
  6. 您只需使用Resource构建Site对象,并将isLeaf上的Resource设置为true,这样您的Resource就不必实现任何遍历逻辑,只需使用request.prePathURLrequest.postpath构建网址即可。 (request.postpath遗憾地没有记录;它是请求中尚未遍历的路径段的列表。)