抓取macOS(本机)的请求
先在mac上安装根证书:
help
→SSL Proxying
→Install Charles Root Certificate
。上一步点击
Install Charles Root Certificate
后它会自动打开钥匙串,点击钥匙串的Trust(信任)→Always Trust(始终信任),然后直接关闭窗口(没有保存按钮,也不用点保存,直接关闭窗口即可)。上一步关闭窗口会提示输入密码,输入后点击
Update Settings(更新设置)
,然后就可以把钥匙串退出了。打开网络设置
点击高级
点击
Proxies
,把Web Proxy(Http)
和Secure Web Proxy(Https)
勾上,如果Automatic Proxy Configuration
有勾,则把它去掉,一般Automatic Proxy Configuration
默认勾上的原因是你用了代理软件(比如ss),最好先把ss关掉,注意你关闭ss的时候,网络设置里它会把你已经勾上的http和https都取消勾选,所以这个要注意反复检查是否勾上了。另外勾上的这两个,都要填写代理服务器地址
127.0.0.1:8888
注意,上一步的端口
8888
就是对应Charles的Proxy
→Proxy Settings
里的Http Proxy
的端口,这个8888可以改成其他数字(最大65535),但不能是本地已使用的(例如80最好别用,因为你本地有可能有nginx或者apache占用了这个端口),因为此时Charles就是一个HTTP代理服务器
,它监听你设置的这个端口,所以如果这个端口已经被占用,那显然就会出问题。整个的原理,就是在网络设置里,把mac本机的http和https请求全部转发到代理服务器(这个代理服务器就是Charles),因为Charles是在本机,所以代理服务器ip地址自然就是本机环回测试ip
127.0.0.1
,而端口在Charles里有设置,只要两边对上,端口未被其他程序占用就行。在
Proxy
→SSL Proxy Settings
里,要把*:443
加上(如果没有的话),*表示任何ip,:443表示443端口,因为443端口是https的端口,所以要允许,否则无法抓取https的包上面全部配置好,随便刷新一个网页,在Charles里看,应该就能看到请求了(看不到请一步一步对一下,看漏了哪里,实在不行关掉Charles再开看看)
抓取iPhone手机的请求
也要先安装根证书
这里说的很清楚,配置你的设备以使用Charles作为它在
http://192.168.0.102:8888
的代理,然后用iPhone的Safari浏览器访问这个地址chls.pro/ssl
来安装证书。根据上面所说的,我们在iPhone的
设置
→无线局域网
点右边那个
¡
点击
配置代理
选择
手动
,然后填写Charles提示的IP和端口,注意,ip和端口不要照填我的,上面Charles弹出的那个提示框里有你自己的ip和端口。点击
存储
保存,保存后mac上的Charles会提示有一个链接试图连接Charles,这个就是手机的链接,这时当然要允许,即点左边的Allow(允许)
按钮。允许之后,iPhone打开Safari浏览器,输入前面Charles提示的地址:
chls.pro/ssl
,然后根据提示一步一步安装证书。点击
允许
点击右上角的
安装
输入密码
点击
安装
点击右上角的
完成
手机随便打开一个app或网页,随便点一下,即可看到Charles抓到的请求。
不使用的时候手机要关闭代理,否则会上不了网(离开你办公室后),或者很慢(因为通过电脑代理肯定比较慢)。
说一下,其实不安装证书直接设置代理也是可以的,只是这样就只能抓http的包,https的就抓不了,而现在很多服务都用https了,所以还是要安装证书!
说一下,其实不安装证书直接设置代理也是可以的,只是这样就只能抓http的包,https的就抓不了,而现在很多服务都用https了,所以还是要安装证书!
抓取Android手机的请求
安卓与iPhone安全一样,也是设置代理,安装证书,但可能容易出问题,比如我的魅蓝S6自带浏览器安装了证书也不行,而Chrome就可以,但小米3 Chrome浏览器也不行,不知道什么问题。
使用自动代理
对于抓包调试手机网页或app,很多童鞋可能遇到过手机如果用wifi怎么也上不了网,而用流量就可以,一度还怀疑wifi网络有问题,最后才发现是因为测试接口抓包的时候忘把代理关掉,把它关掉就可以上了,但是下次测试又得重新设置代理,特别麻烦。
事实上我们使用自动代理,就可以实现『即使忘了关代理也不会上不了网』的问题。自动代理是让配置文件决定要不要代理,配置文件我们叫pac文件(proxy auto config),后缀也是
.pac
结尾。以下配置文件的意思,就是判断请求的域名是否为
www.hexotest.com
,如果是,则把它代理到192.168.0.102:8888
,如果192.168.0.102:8888
无法访问,那么走后面的DIRECT
即直连,不代理了。如果域名不是www.hexotest.com
那就直连不走代理。//一个很简单的调pac文件
function FindProxyForURL(url, host) {
//这里填写你们公司的host
if (dnsDomainIs(host, 'www.hexotest.com')) {
//这里填你自己的局域网ip,端口号是你在Charles里设置的 默认8888
return "PROXY 192.168.0.102:8888; DIRECT;";
} else {
return "DIRECT";
}
}
Bash
把配置文件命名成
xxx.pac
,比如我命名成proxy.pac
,然后放到nginx目录里,让它可以访问,比如电脑的ip是192.168.0.102
,那么我通过在手机通过http://192.168.0.102/proxy.pac
就可以访问,这样,手机就会根据pac文件的配置来决定是否代理。电脑的话也一样,不过因为配置文件就在电脑本地,所以ip就是127.0.0.1,但是要注意,如果你用了科学上网工具ss,一定要把这工具先关掉,否则它会占用这个配置。
pac配置文件除了可以放本地,也可以放外网线上,这样你手机可以一直设置着,不会因为你电脑的ip可能会变,又要改ip。