相信各位在移动端开发过程中一定遇到抓取请求的场景,本文主要显示 iOS 11 在 CharlesFiddlerWhistle 下HTTPS抓包配置,欢迎留言区补充其他工具。PS.留言使用 Disqus 插件需要科学上网

已经熟悉以上三个工具基础配置,仅仅需要解决抓包 iOS 下 HTTPS 问题的同学可以直接打开锦囊

Charles

  • 官网
  • 按照 license 收费,收费后终身享受升级,仅限 OS X 平台

HTTP 抓包

1.确保手机与主机处于同一局域网内。

查看本机 IP,使用 ifconfig 命令查看本机 IP;或者打开系统设置查看 IP 如截图;

当前本机 IP 192.168.191.4

ifconfig

wifi-config

2.设置手机 iOS 网络代理

设置 -> 无线局域网 -> HTTP 代理 -> 手动

服务器:192.168.191.4 端口:8888

3.配置完成后,在手机端访问任何一个 App 或网页,本机 charles 会弹出提示,点击 Allow

此时已经可以抓取 HTTP 数据了

HTTPS 抓包

1.信任证书 本机

打开 charles 后如下图操作,本机信任 charles 证书,注意 此处选择system

charles-install-root-cer

charles-install-root-cer-system

2.信任证书 手机

打开 safari 地址输入192.168.191.4:8888chls.pro/ssl点击安装,此时会弹出要求需要输入手机密码,完成后证书安装成功。

此时查看通用->描述文件中 charles proxy ca 已变成已验证

注意 自 iOS 10.3 以上,还需要多一步操作,手动信任自定义根证书,才能确保证书安装并已启用;如图所示;

关于本机->证书信任设置启用 charles proxy ca 截图详见锦囊

3. Charles 设置启用 SSL Proxy

Proxy->SSL Proxy setting Enabled SSL Proxying

同时增加希望抓取的域名,例如:*.jd.com端口 443

charles-ssl-config01

charles-ssl-config02

配置完成 : )

Fiddler

  • 官网
  • 微软出品,免费,由于需要 .Net 库仅 Windows 平台

HTTP 抓包

配置与 Charles 配置相同端口略有不同,此处不再重复

fiddler01

HTTPS 抓包配置

  • 勾选拦截 HTTPS 请求
  • 安装证书(电脑端 & 手机端)

fiddler02

Whistle

  • 官网
  • 国人开发,开源 MIT 协议,基于 NodeJS 跨平台
  • 推荐

工具准备

  • nodejs v0.10.0+
  • npm i -g whistle
  • w2 start

完成上面几步操作后,此时8899端口已经常驻后台。

界面

whistle

Chrome 插件

whistle 提供了一个基于 Chrome 的插件,可以方便切换代理,查看网络,编辑规则等,不过很遗憾作者已经将插件在 Web Store 下架,现在搜索不到,我把本地 0.10.0 版本打包成 crx 上传在 Google Driver 可以访问 下载

或者改用另外一个强大的插件 Proxy SwitchyOmega

HTTPS 拦截配置

whistle 文档 https 设置部分

iOS 11 HTTPS 抓包锦囊

注意 自 iOS 10.3 以后,无论使用上面哪一种工具抓包,安装完 ca 证书以后,还需要多一步操作,才能确保证书安装并已启用;

通用 -> 关于本机 -> 证书信任设置 -> 启用相对应的证书,就可以看到工具中抓取到相应的 HTTPS 请求。

ios-cer

这点跟苹果的 one more thing 貌似有那么一点不谋而合。

have fun :D