2012-01-30 28 views
7

Estoy tratando de imprimir el cuerpo de una respuesta HTTP utilizando Python.Proxy de Python Twisted: cómo interceptar paquetes

Aquí está mi código 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() 

Cuando conecto mi navegador a localhost: 8080, puedo ver que todas mis solicitudes están siendo dirigidos a través del proxy Python que se ejecutan localmente. Pero ¿cómo puedo 1) imprimir el cuerpo de la respuesta y 2) editar el cuerpo de la respuesta antes de devolverlo al navegador?

Espero que alguien pueda señalarme en la dirección correcta, tenga en cuenta que soy muy nuevo en Python.

Respuesta

9

reemplazar el método de un protocolo (proxy.Proxy en su caso) dataReceived y manejar la modificación de datos en ese método:

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, muchas gracias por esta respuesta. Obtuve una excepción: archivo "proxy4.py", línea 15, en dataReceived \t return super (MyProxy, self) .dataReceived (datos) \t exceptions.TypeError: debe ser type, no classobj – Eamorr

+0

Corregí el código. ¿Puedes verificar si todavía está activando TypeError ?. –

+0

Muchas gracias, está funcionando ahora ... – Eamorr

Cuestiones relacionadas