Questo è da una blog post ho scritto un po 'indietro. usando webob e incolla. TransparentProxy inoltra la richiesta a qualunque URL specificato dalla richiesta. È possibile scrivere il middleware per fare qualcosa con la richiesta prima che venga passata a transparentproxy.
Poi basta impostare il vostro browser impostazioni proxy a qualsiasi indirizzo il proxy è in esecuzione.
questo esempio stampa la richiesta e la risposta, per il vostro caso, si desidera controllare lo stato della risposta per un 404 o 302 o qualsiasi altra cosa e la spedizione al codice che si scrive.
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)
edit:
Ecco un esempio di middleware ho scritto così ho potuto intercettare un percorso e restituire una risposta diversa. Io uso questo per testare un'applicazione pesante javascript che è hardcoded per la produzione, io intercetto il config.js e produco il mio che ha unittest impostazioni specifiche.
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)
e come esempio vorrei inizializzare in questo modo ....
app = FileIntercept(TransparentProxy(),
file_intercept={"/js/config.js":Response("/*new settings*/")})
httpserver.serve(HTTPMiddleware(app), "0.0.0.0", port=8088)
Grazie spacedman. Dato che questo è per un filtro, se voglio assicurarmi che nessuno disabiliti il proxy, come posso farlo? C'è un modo per rendere il target predefinito per i browser rimanere con il mio proxy? – Sam
Nevermind. Trovato quello che stavo cercando - intercettare il proxy – Sam
** scapy ** non farà questo compito? si prega di dare un'occhiata al mio argomento: http://stackoverflow.com/questions/9774525/how-to-filter-sniff-out-web-pages-according-to-datatext-contained –