Http 扭曲代理请求修改方法

Http 扭曲代理请求修改方法,http,proxy,twisted,Http,Proxy,Twisted,如何查看twisted代理服务器发送的请求我应该查看twisted.web.proxy的哪一部分。目的是在将接收到的数据发送到目标服务器之前添加额外的头。 例如,向所有代理请求添加一个额外的头,如“Xzone:foo.com\r”,以便最终请求如下所示: GET / HTTP/1.1\r Xzone: foo.com\r Host: bbb.com\r User-Agent: mozilla\r Accept: */*\r 提前感谢您提供的任何信息。不幸的是twisted.web.proxy相

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

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

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

不幸的是
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
,就像设置一个常规的
站点一样

您可能希望在
GET
行之后添加标题。尝试执行自定义操作。但同时也想知道如何实现这些定制请求。浏览器发送普通请求,twisted代理在GET请求上方添加Xzone:头。问题中的示例不是合法的HTTP请求。如果这真的是你想要做的,那么我不认为Twisted Web会对你有很大帮助(因为Twisted Web是用于HTTP的,而不是完全用于HTTP)。好吧,就像你之前建议的那样,在GET行之后添加头。数据通过Twisted代理,这怎么可能仍然实现呢。我应该重写什么方法。这是一张来自wireshark的图片,显示了我试图实现的目标![请求][1][1]@Jean-Paul Calderone抱歉,那张照片让我有点困惑。它看起来像一个连接,接收一个HTTP请求,然后再接收另一个HTTP请求,然后发送一个HTTP响应。两个请求加一个响应是不合法的HTTP。也许这里正在进行一些流水线操作?但你在问题中没有提到,所以我不确定。也许你可以编辑你的问题,让它更完整地描述你试图实现的行为。我决定创建一个新的问题,确切地显示我试图实现的目标。