不错的文章:Charles工具使用教程,以及注意事项

使用charles前记得将charlse设置成系统级代理

做手机端前端页面的开发,开发过程中,需要在手机端能看到相应的效果,怎么办?

一般在PC端开发的时候,我们都会起一个服务(比如webpack的的服务),然后在本地访问相应的url进行访问,进而进行预览并调试。手机端如何也能访问得到这个PC端自己的url呢?Charles就派上用场了。

拦截手机请求(http请求)

Charles 通常用来截取本地上的网络封包,但是当我们需要时,我们也可以用来截取其它设备上的网络请求。

手机和PC得在同一个局域网下。这边实现的是转发http请求,https请求由于是加密的,得在Charles做代理,并在手机上安装证书,这个后面再说。

在PC端的Charles上设置:

要截取 iPhone 上的网络请求,我们首先需要将 Charles 的代理功能打开。在 Charles 的菜单栏上选择 “Proxy”–>“Proxy Settings”,填入代理端口 8888,并且勾上 “Enable transparent HTTP proxying” 就完成了在 Charles 上的设置。如下图所示:

在手机上设置:

首先我们需要获取 Charles 运行所在电脑的 IP 地址,Charles 的顶部菜单的 “Help”–>“Local IP Address”,即可在弹出的对话框中看到 IP 地址,如下图所示:(mac系统也可以在终端输入ifgonfig en0来查看,window的命令是ipconfig

在 iPhone 的 “ 设置 ”–>“ 无线局域网 ” 中,可以看到当前连接的 wifi 名,通过点击右边的详情键,可以看到当前连接上的 wifi 的详细信息,包括 IP 地址,子网掩码等信息。在其最底部有「HTTP 代理」一项,我们将其切换成手动,然后填上 Charles 运行所在的电脑的 IP,以及端口号 8888,如下图所示:

安卓手机wifi的”代理“那一块可能还有一个”IP设置“,保留默认的DHCP就行。另外那个主机名填的的是PC的ip地址

设置好之后,我们打开 iPhone 上的任意需要网络通讯的程序,就可以看到 Charles 弹出 iPhone 请求连接的确认菜单(如下图所示),点击 “Allow” 即可完成设置。

至此,手机上点击什么需要连接网络的请求都会被PC端的这个Charles给拦截到,这样,手机端随便访问个自己写的url,Charles再将这个url的请转发到PC端自己起的那个服务的url就行,这样手机端就能访问到PC端的那个url的内容了。

补充

  • Charles的Tools->Map Remote里面有所有已经设置的请求转发的条目

  • 如果想拦截某个域名下的所有请求,将path栏放空就行: