【问题标题】:Twisted Proxy with range splitting具有范围分割的 Twisted 代理
【发布时间】:2016-01-20 19:36:45
【问题描述】:

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

我怎样才能实现一个扭曲的代理,它会在 502 错误时尝试将请求拆分为更小的允许块。文档很难遵循。我知道我需要扩展 ProxyRequest,但从那里我有点卡住了。

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

【问题讨论】:

    标签: python http proxy twisted


    【解决方案1】:

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

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

    1. render_GET 中,构造一个URL 以使用Agent 发出多个传出请求
    2. 返回NOT_DONE_YET
    3. 在收到每个响应时,对原始传入请求调用 request.write,然后发出带有 Range 标头的新请求
    4. 最后,当收到最后一个回复时,请根据您的原始请求致电 request.finish

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

    【讨论】:

    • 谢谢。我没想过要覆盖站点。试图让代理解决我的问题。
    猜你喜欢
    • 2020-06-29
    • 2012-08-01
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    相关资源
    最近更新 更多