2012-01-30 85 views
7

我試圖用Python打印出HTTP響應的主體。Python扭曲的代理 - 如何攔截數據包

這裏是我的代碼SOFAR:

from twisted.web import proxy, http 
from twisted.internet import reactor 
from twisted.python import log 
import sys 

log.startLogging(sys.stdout) 

class ProxyFactory(http.HTTPFactory): 
    protocol=proxy.Proxy 

reactor.listenTCP(8080, ProxyFactory()) 
reactor.run() 

當我連接我的瀏覽器到localhost:8080,我可以看到我所有的請求被通過本地運行的Python代理執導。但是,我怎樣才能1)打印出響應主體,並且2)在將其發送回瀏覽器之前編輯響應主體?

我希望有人能指出我正確的方向 - 請記住,我對Python非常陌生!

回答

9

重寫的協議(proxy.Proxy你的情況)的方法dataReceived和處理數據修改在該方法中:

from twisted.web import proxy, http 
from twisted.internet import reactor 
from twisted.python import log 
import sys 

log.startLogging(sys.stdout) 

class MyProxy(proxy.Proxy): 
    def dataReceived(self, data): 

     # Modify the data here 
     print data 

     # perform the default functionality on modified data 
     return proxy.Proxy.dataReceived(self, data) 

class ProxyFactory(http.HTTPFactory): 
    protocol=MyProxy 

factory = ProxyFactory() 
reactor.listenTCP(8080, factory) 
reactor.run() 
+0

嘿,該答覆許多感謝。我得到了一個異常 - 文件「proxy4.py」,第15行,在dataReceived中 \t return super(MyProxy,self).dataReceived(data) \t exceptions.TypeError:必須是type,而不是classobj – Eamorr 2012-01-30 15:32:10

+0

更正了代碼。你可以檢查它是否仍然引發TypeError ?. – 2012-02-02 12:39:47

+0

非常感謝 - 它現在正在工作... – Eamorr 2012-02-02 16:32:34