具有范围分割的 Twisted Proxy
Twisted Proxy with range splitting
我想编写一个扭曲的代理,将非常大的 GET 请求拆分成较小的固定大小范围,并将其发送到另一个代理(使用范围:字节)。另一个代理不允许大响应,当响应很大时 returns 502。
我如何在 twisted 中实现代理,在出现 502 错误时它会尝试将请求拆分为更小的允许块。文档很难遵循。我知道我需要扩展 ProxyRequest,但从那里我有点卡住了。
它不一定是一个扭曲的代理,但它似乎很容易修改,我设法至少通过将 connectTCP 设置为我的代理(在 ProxyRequest.parsed).
实际上,扩展 ProxyRequest 可能不是最简单的方法; ProxyRequest 非常强烈地假设一个请求 = 一个响应,而在这里您想将单个请求拆分为多个请求。
更简单的方法是简单地编写一个 Resource 实现来满足您的需求,简单来说就是:
- 在
render_GET
中,构造一个 URL 以使用 Agent
发出多个传出请求
- return
NOT_DONE_YET
- 随着每个响应的到来,对原始传入请求调用
request.write
,然后使用 Range
header 发出新请求
- 最后当收到最后一个响应时,根据您的原始请求调用
request.finish
您可以简单地用您的 Resource
构造一个 Site
object,然后将 Resource
上的 isLeaf
设置为 true,这样您的 Resource
不必实现任何遍历逻辑,只需使用 request.prePathURL
和 request.postpath
构建 URL。 (遗憾的是,request.postpath
没有记录;它是请求中 not-yet-traversed 路径段的列表)。
我想编写一个扭曲的代理,将非常大的 GET 请求拆分成较小的固定大小范围,并将其发送到另一个代理(使用范围:字节)。另一个代理不允许大响应,当响应很大时 returns 502。
我如何在 twisted 中实现代理,在出现 502 错误时它会尝试将请求拆分为更小的允许块。文档很难遵循。我知道我需要扩展 ProxyRequest,但从那里我有点卡住了。
它不一定是一个扭曲的代理,但它似乎很容易修改,我设法至少通过将 connectTCP 设置为我的代理(在 ProxyRequest.parsed).
实际上,扩展 ProxyRequest 可能不是最简单的方法; ProxyRequest 非常强烈地假设一个请求 = 一个响应,而在这里您想将单个请求拆分为多个请求。
更简单的方法是简单地编写一个 Resource 实现来满足您的需求,简单来说就是:
- 在
render_GET
中,构造一个 URL 以使用Agent
发出多个传出请求
- return
NOT_DONE_YET
- 随着每个响应的到来,对原始传入请求调用
request.write
,然后使用Range
header 发出新请求
- 最后当收到最后一个响应时,根据您的原始请求调用
request.finish
您可以简单地用您的 Resource
构造一个 Site
object,然后将 Resource
上的 isLeaf
设置为 true,这样您的 Resource
不必实现任何遍历逻辑,只需使用 request.prePathURL
和 request.postpath
构建 URL。 (遗憾的是,request.postpath
没有记录;它是请求中 not-yet-traversed 路径段的列表)。