具有范围分割的 Twisted Proxy

Twisted Proxy with range splitting

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

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

它不一定是一个扭曲的代理,但它似乎很容易修改,我设法至少通过将 connectTCP 设置为我的代理(在 ProxyRequest.parsed).

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

更简单的方法是简单地编写一个 Resource 实现来满足您的需求,简单来说就是:

  1. render_GET 中,构造一个 URL 以使用 Agent
  2. 发出多个传出请求
  3. return NOT_DONE_YET
  4. 随着每个响应的到来,对原始传入请求调用 request.write,然后使用 Range header
  5. 发出新请求
  6. 最后当收到最后一个响应时,根据您的原始请求调用 request.finish

您可以简单地用您的 Resource 构造一个 Site object,然后将 Resource 上的 isLeaf 设置为 true,这样您的 Resource 不必实现任何遍历逻辑,只需使用 request.prePathURLrequest.postpath 构建 URL。 (遗憾的是,request.postpath 没有记录;它是请求中 not-yet-traversed 路径段的列表)。