2014-02-20 46 views
0

如何查看由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 

預先感謝任何信息。

+0

您可能想要在GET行後添加標題。試圖做一些自定義的東西 –

+0

。但也想知道如何實現這樣的自定義請求。瀏覽器發送正常的請求,並且雙絞線代理添加GET請求上方的Xzone:標頭。 – mikie

+0

問題中的示例不是合法的HTTP請求。如果這真的是你想做的事情,那麼我不認爲Twisted Web將會幫助你很多(因爲Twisted Web對於HTTP來說不是非常HTTP)。 –

回答

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 

現在成立了ChangeSomeHeadersSite,你會經常Site

+0

這是一張來自wireshark的圖片,顯示了我正在努力實現的目標![請求] [1] [1] http://imgur.com/AR3hYPj @ Jean-Paul Calderone – mikie

+0

對不起,這張照片令我頗爲困惑。它看起來像一個連接,它接收一個HTTP請求,然後接收另一個HTTP請求,然後發送一個HTTP響應。具有一個響應的兩個請求不是合法的HTTP。也許這裏有一些流水線?但是你沒有提到你的問題,所以我不確定。也許你可以編輯你的問題,以便更完整地描述你想要達到的行爲。 –

+0

已決定創建一個新的問題,顯示我試圖達到什麼。 – mikie