1. 介绍

Charles 其实是一个本地代理服务器,它提供了很多的功能例如:抓包、反向代理、查看 HTTP 报文等一系列的工具。这是 Charles 的启动页面,给我的感觉非常的好看和优雅:

2. 使用

打开后 Charles 的界面分布非常的简单,如下图所示:

首先需要保证代理已经开启(MacOS 则对应着 Mac Proxy)

接着打开 Proxy Settings,记录下本地 HTTP 代理的端口号:

然后在 Chrome 中通过 SwitchyOmega 代理插件将请求转发到 Charles 的本地 HTTP 代理上:

Map Remote

Map Remote 功能允许将某一个请求的转发到指定的域名、端口号、请求路径上。假如我们想将请求 http://example.org/api/users 转发到本地的 http://localhost:8080/users 上,那么我们就可以像下图一样配置:

同时它也支持通配符模式,如下:

这样当访问下面的 URL 时:

http://example.org/api/users
http://example.org/api/posts

都会被映射到:

http://localhost:8080/users
http://localhost:8080/posts

作为测试,我们可以运行本地 Python Flask 服务:

from flask import Flask
from werkzeug.routing import BaseConverter

class RegexConverter(BaseConverter):
    def __init__(self, map, *args):
        super().__init__(map)
        self.map = map
        self.regex = args[0]

app = Flask(__name__)
app.url_map.converters['regex'] = RegexConverter

@app.route('/<regex(".*"):url>')
def index(url):
    return 'Request, URL=/{}'.format(url)

if __name__ == '__main__':
    app.run(port=8080)

这样就可以很容易地实现本地请求域名+请求路径重写了: