は、これは私がしばらく前に書いたblog postからです。 webobと貼り付けを使用して。 TransparentProxyは、要求が指定したURLに要求を転送します。透明なプロキシに渡される前に、リクエストを使って何かを行うミドルウェアを書くことができます。
次に、ブラウザのプロキシ設定を、プロキシが動作しているアドレスに設定します。
この例では、リクエストとレスポンスを出力します。あなたのケースでは、404や302などのレスポンスステータスをチェックし、あなたが書いたコードにディスパッチする必要があります。
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)
編集:
は、ここで私はので、私はパスをインターセプトし、異なる応答を返すことができ書いたミドルウェアの例です。私は生産のためにハードコードされているjavascript重いアプリケーションをテストするためにこれを使用します。私はconfig.jsをインターセプトし、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)
と、例として、私はそうのようにそれを初期化するだろう、それはgoogle.comのような特定のウェブサイト、だ
app = FileIntercept(TransparentProxy(),
file_intercept={"/js/config.js":Response("/*new settings*/")})
httpserver.serve(HTTPMiddleware(app), "0.0.0.0", port=8088)
ありがとう。これはフィルタのためのものなので、誰もプロキシを無効にしないようにするにはどうしたらいいですか?私のプロキシにブラウザのデフォルトターゲットを残す方法はありますか? – Sam
心配しないでください。私が探していたものが見つかりました - プロキシを傍受する – Sam
** scapy **はこの作業を行いませんか?私のトピックを見てください:http://stackoverflow.com/questions/9774525/how-to-filter-sniff-out-web-pages-according-to-datatext-contained –