2012-01-30 10 views
7

Sto provando a stampare il corpo di una risposta HTTP usando Python.Python Twisted proxy - come intercettare i pacchetti

Ecco il mio codice 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() 

Quando mi collego il mio browser su localhost: 8080, posso vedere che tutte le mie richieste vengono indirizzate attraverso il proxy Python in esecuzione a livello locale. Ma come faccio 1) stampare il corpo della risposta e 2) modificare il corpo della risposta prima di inviarlo al browser?

Spero che qualcuno possa indicarmi la giusta direzione, tenete presente che sono molto nuovo a Python!

risposta

9

ridefinire il metodo di un protocollo (proxy.Proxy nel tuo caso) dataReceived e gestire la modifica dei dati in quel metodo:

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

Hey, molte grazie per la risposta. Ho ottenuto un'eccezione - File "proxy4.py", riga 15, in dataReceived \t return super (MyProxy, self) .dataReceived (data) \t exceptions.TypeError: deve essere type, not classobj – Eamorr

+0

Correzione del codice. Puoi controllare se sta ancora sollevando TypeError ?. –

+0

Grazie mille - funziona ora ... – Eamorr