twisted代理请求修改方法

时间:2014-02-20 09:55:07

标签: http proxy twisted

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

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

提前感谢任何信息。

1 个答案:

答案 0 :(得分:2)

不幸的是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

现在像常规ChangeSomeHeadersSite一样设置Site