很多人都知道 Chrome 开发者工具的 Network 下可以自定义网络环境,Chrome 可以模拟在 Fast 3G、Slow 3G 等一系列网络环境中加载页面:
如果你只是想简单地调试调试本地网站,那么这个工具可以满足你的需求。但是使用这种方法只能“放慢”网络,如果你本身的网络环境就很糟糕,加载网站的时间很长,或者你需要更加高级的网络设置,比如设置丢包率,压低带宽值,那么这个工具并不能满足你的需求。这篇文章希望解决的问题是将网络环境可控化,基本的设想是,将外部网站缓存在不受网络环境干扰的内网,然后人工地制造时延、丢包、带宽限制等因素。
代理服务器
在代理服务器上我们需要用到 Web 调试工具 Fiddler。它本身的功能有很多,在这里我们需要用到的是它的监听功能和 AutoResponder。Fiddler 可以监听当前机器上发出的 HTTP 请求及收到的 HTTP 响应,并可以按照进程 ID 对捕获到的数据进行过滤。AutoResponder 可以使用捕获到的数据模拟 Web 服务器对客户端作出响应。
首先,我们需要使用代理服务器上的浏览器访问我们需要调试的网站,在此期间使用 Fiddler 捕获所有进出的 HTTP 数据包,将它们缓存在本地。然后,我们打开 AutoResponder,它将使用先前缓存的 HTTP 响应回复发往本机 8888 端口的 HTTP 请求。最后,我们还需要设置 Clumsy 来制造我们所需的网络环境。
下图为 AutoResponder 代理 http://www.qq.com:
下图为使用 Clumsy 在 8888 端口上制造我们所需的网络环境:
访问方
我们只需要设置浏览器代理,让它将所有 HTTP 请求都发往 代理服务器IP:8888 即可,比如 Chrome 浏览器可以使用插件 SwitchyOmega。至此,我们需要调试的网站所处网络环境就是完全可控的了。