mitmproxyを使う
http(s)通信の内容を覗くのに、Windowsだと「Fiddler」を使っていたけど、
Macでも覗きたい。
なので、Mac向けのツールを探す。
「Charles」がよさげなのだけど、有料なので30分で動作がとまってしまう。
無料なツールで「mitmproxy」がつかえそう。
1. インストール
ぐぐってインストール
$ mitmproxy --version
Mitmproxy version: 2.0.2 (release version)
Python version: 3.6.3
Platform: Darwin-16.7.0-x86_64-i386-64bit
SSL version: OpenSSL 1.1.0f 25 May 2017
Mac version: 10.12.6 ('', '', '') x86_64
2. 起動
「test_script.py」にpythonでスクリプトを書く
$ mitmproxy -s test_script.py
3. スクリプト
# -*- coding: utf-8 -*- from mitmproxy import http from mitmproxy import ctx ################################################# # リクエストの改ざん def request(flow:http.HTTPFlow): # methodを指定 if flow.request.method == "POST": ### # APIのアクセス先URLを一部変更する if "/api/test/rel" in flow.request.url: # URLを置換 flow.request.url = flow.request.url.replace("/dev","/test") ctx.log.info(flow.request.url) ### # formデータの変更(または追加) if "/api/test2/" in flow.request.url: # formに存在していれば変更、なければ追加 flow.request.urlencoded_form["hogehoge"] = "piyo" elif flow.request.method == "GET": if "/api/test3" in flow.request.url: # クエリストリングの書き換え or 追加 flow.request.query["hogehoge"] = "10" ################################################# # レスポンスの改ざん def response(flow: http.HTTPFlow): if flow.request.method == "POST": if "/api/test4" in flow.request.url: flow.response.status_code = 500; elif "/api/test5" in flow.request.url: flow.response.status_code = 408; else: flow.response.content = b" " # 空になる