Se trata de un blog post que escribí hace un tiempo. usando webob y pegar. TransparentProxy reenvía la solicitud a cualquier url que especifique la solicitud. Puede escribir middleware para hacer algo con la solicitud antes de que se transfiera a transparentproxy.
Luego, simplemente establezca la configuración del proxy de su navegador en cualquier dirección en la que se ejecute su proxy.
Este ejemplo imprime la solicitud y la respuesta, para su caso, desea verificar el estado de respuesta de un 404 o 302 o lo que sea y enviarlo al código que escribe.
from webob.dec import wsgify
from paste import httpserver
from paste.proxy import TransparentProxy
def print_trip(request, response):
"""
just prints the request and response
"""
print "Request\n==========\n\n"
print str(request)
print "\n\n"
print "Response\n==========\n\n"
print str(response)
print "\n\n"
class HTTPMiddleware(object):
"""
serializes every request and response
"""
def __init__(self, app, record_func=print_trip):
self._app = app
self._record = record_func
@wsgify
def __call__(self, req):
result = req.get_response(self._app)
try:
self._record(req.copy(), result.copy())
except Exception, ex: #return response at all costs
print ex
return result
httpserver.serve(HTTPMiddleware(TransparentProxy()), "0.0.0.0", port=8088)
edición:
He aquí un ejemplo de middleware que escribí para que pudiera interceptar un camino y devolver una respuesta diferente. Utilizo esto para probar una aplicación pesada javascript que está codificada para producción, intercepto config.js y obtengo mi propio que tiene ajustes específicos de unittest.
class FileIntercept(object):
"""
wsgi: middleware
given request.path will call wsgi app matching that path instead
of dispatching to the wrapped application
"""
def __init__(self, app, file_intercept={}):
self._app = app
self._f = file_intercept
def __call__(self, environ, start_response):
request = Request(environ)
if request.path.lower() in self._f:
response = request.get_response(self._f[request.path.lower()])
else:
response = request.get_response(self._app)
return response(environ, start_response)
y como ejemplo me inicializarlo como tal ....
app = FileIntercept(TransparentProxy(),
file_intercept={"/js/config.js":Response("/*new settings*/")})
httpserver.serve(HTTPMiddleware(app), "0.0.0.0", port=8088)
Gracias spacedman. Como esto es para un filtro, si quiero asegurarme de que nadie deshabilita el proxy, ¿cómo puedo hacer eso? ¿Hay alguna manera de mantener el destino predeterminado para los navegadores con mi proxy? – Sam
No importa. Encontré lo que estaba buscando - proxy de interceptación – Sam
** scapy ** no hará esta tarea? eche un vistazo a mi tema: http://stackoverflow.com/questions/9774525/how-to-filter-sniff-out-web-pages-according-to-datatext-contained –