ほぼ以前書いたmitmproxy を使ってアプリの API を無理やり開発環境に向けると同じですが、相違点は以下の通りです。
- 前回はリモートのどこかにある開発環境を意図していたが、今回はローカルの開発環境で動くサーバに接続する
- そして mitmproxy と開発サーバは同一のマシン上で立ち上げる前提
- 前回は本番環境も開発環境も同じプロトコル (HTTPS) という前提だったが、今回は本番環境は HTTPS で開発環境は HTTP とする
- Rails とかの開発サーバを HTTPS で立ち上げることは稀だと思います
- (主にこれのやり方がわからず調べるのに手間取ったので、こうして記事に残してます)
手順
mitmproxy の導入については以前の記事に書いてあるので割愛。
今回もやはり Python スクリプトによるリクエストの改ざんを行います。
replace_host.py
def request(context, flow):
# 本番環境 (リクエスト改ざん対象のホスト)
original = "api.example.com"
# 開発環境 (同一マシンという前提なのでループバックを指定)
replace = "127.0.0.1"
if original in flow.request.host:
if original in flow.request.headers["Host"]:
# 開発サーバは HTTP
flow.request.scheme = "http"
flow.request.host = replace
# 開発サーバのポート番号を指定
flow.request.port = 3000
flow.request.headers["Host"] = [replace]
そして以下のように起動します。
$ mitmproxy -p 8080 -s replace_host.py
あとはこのプロキシを使うように準備した iPhone 等から接続してアプリを実際に操作するだけ。