【问题标题】:twisted Proxy request modification methodstwisted Proxy 请求修改方法
【发布时间】:2014-02-20 09:55:06
【问题描述】:

如何查看twisted 代理服务器发送的请求,我应该查看twisted.web.proxy 的哪个部分。目的是在将 dataReceived 发送到目标服务器之前添加额外的标头。 例如,为所有代理请求添加一个额外的标头,例如“Xzone: foo.com\r”,以便最终请求如下所示:

GET / HTTP/1.1\r
Xzone: foo.com\r
Host: bbb.com\r
User-Agent: mozilla\r
Accept: */*\r

提前感谢您提供任何信息。

【问题讨论】:

  • 您可能希望在GET 行之后添加标题。
  • 尝试做一些自定义的事情。但也想知道如何实现这样的自定义请求。浏览器发送正常请求,扭曲代理在 GET 请求上方添加 Xzone: 标头。
  • 问题中的示例不是合法的 HTTP 请求。如果这真的是您想要做的,那么我认为 Twisted Web 不会对您有很大帮助(因为 Twisted Web 是用于 HTTP 而不是非常 HTTP)。
  • 好吧,就像您之前建议的那样,在 GET 行之后添加标题。如何通过扭曲代理传递数据来实现这一点。我应该重写什么方法。

标签: http proxy twisted


【解决方案1】:

不幸的是,twisted.web.proxy 相当粗鲁,并且没有考虑到这种自定义。但是,可以通过多种不同方式将新标头注入代理请求。一般的想法是挂钩到处理请求的步骤之一并修改请求标头,以便它们包含您的新标头。

例如,您可以连接到ProxyRequest.process

from twisted.web.proxy import ProxyRequest

class ChangeSomeHeadersProxyRequest(ProxyRequest):
    def process(self):
        self.changeHeaders()
        return ProxyRequest.process(self)

    def changeHeaders(self):
        # Inject an extra request header.
        self.requestHeaders.addRawHeader(b"Xzone", b"foo.com")

然后将其连接到代理的其余部分:

from twisted.web.proxy import Proxy
from twisted.web.server import Site

class ChangeSomeHeadersSite(Site):
    protocol = Proxy
    requestFactory = ChangeSomeHeadersProxyRequest

现在像普通的Site 一样设置ChangeSomeHeadersSite

【讨论】:

  • 这是一张来自 wireshark 的图片,展示了我想要达到的目标![request][1] [1]imgur.com/AR3hYPj@Jean-Paul Calderone
  • 对不起,那张照片让我很困惑。它看起来像一个连接,接收一个 HTTP 请求,然后接收另一个 HTTP 请求,然后发送一个 HTTP 响应。一个响应的两个请求不是合法的 HTTP。也许这里有一些流水线?但你没有在你的问题中提到这一点,所以我不确定。也许您可以编辑您的问题,以便更完整地描述您想要实现的行为。
  • 已决定创建一个新问题,以准确显示我想要实现的目标。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-27
  • 1970-01-01
  • 2011-01-11
  • 2015-03-03
  • 1970-01-01
  • 2015-09-11
相关资源
最近更新 更多