之前都是爬取Web网页的内容,这章学习一下App的爬取。
如果要在App端查看各个网络的请求和响应过程,一般要使用抓包软件,常用的有WireShark、Filddler、Charles、mitmproxy、AnyProxy等,通过设置代理的方式将手机处于抓包软件的监听之下,方便查看App在运行过程中发生的所有请求和响应。
Charles的使用
Charles是一个网络抓包工具,跨平台支持非常好,可以用来做App的抓包工具,得到网络请求响应内容,相当于Web浏览器的开发者工具Network部分看到的内容。
下载与配置
从官网直接下载:https://www.charlesproxy.com/download/
激活:自己从网上找激活账号,或者免费试用30天,后续还是可以免费试用的,只不过有时间限制
配置证书:如果想要做HTTPS抓包,还需要配置相关的SSL证书。
Mac系统:
点击Help-SSL Proxying-Install Charles Root Certificate,即进入证书的安装页面。找到证书并双击,设置为“始终信任”。
IOS系统:
查看Proxy-Proxy Settings,打开代理设置页面,确保HTTP代理开启,
将手机和电脑连在同一局域网下,将手机的代理设置为和电脑IP一样。
点击 Allow,这样手机和PC连在同一局域网了,并且设置了Charles的代理,此时Charles可以抓取到流经App的数据包了。
安装Charles的HTPPS证书:手机浏览器中打开chls.pro/ssl下载证书并安装。
开启SSL监听:点击Proxy-SSLProxying Settings,在弹出的窗口点击Add,添加需要监听的地址和端口,如果需要监听所有的HTTPS请求,直接将地址和端口设置为*
原理
设置手机代理为Charles的代理地址,这样手机访问互联网的数据包就会流经Charles,Charles再转发这些数据包到真实的服务器,服务器返回的数据包再经由Charles转发回手机,相当于祈祷一个中间人的作用。Charles还有权利对请求和应用进行修改。
抓包
打开手机京东,搜索ipad,打开商品评论页面:
不断下拉加载评论,可以看到Charles捕获到这个过程中京东App内发生的所有网络请求:
在api.m.jd.com中查看一条条目,切换到contents选项卡,发现一些JSON数据,核对一下结果,发现正好是我们正在App上看到的评论:
所以该接口就是获取商品评论的接口。这样我们就成功捕获到了在下拉刷新过程中发生的请求和响应内容。
分析
回到该请求的Overview选项卡,显示了该接口的URL、响应状态码、请求方式等:
点击contents选项卡,查看该请求和响应的详情信息:
上半部分显示Request信息,下半部分是Response信息。
重发
这是Charles的一个强大的功能,可以修改捕获到的请求并进行重发,通过该功能,可以通过修改参数、接口等来测试不同请求的响应状态,判断哪些参数是必要的,以及参数规律。
mitmproxy的使用
mitmproxy是一个支持HTTP与HTTPS的抓包程序,通过控制台操作。它有两个关联组件:mitmdump和mitmweb。mitmdump是mitmproxy的命令行接口,可以对接python脚本,实现监听后的处理;mitmweb是一个Web程序,可以观察mitmproxy捕获的请求。
安装方式
1 | brew install mitmproxy |
执行完毕后即可完成安装,附带安装了mitmdump和mitmweb这两个组件。
证书配置
mitmproxy在安装后会提供一套CA证书,只需要信任,就可以通过它获取HTTPS请求的具体内容。
产生CA证书:1
mitmdump
一共有五个证书:
mac环境下证书配置过程如下:
点击mitmproxy-ca-cert.pem,弹出钥匙串管理页面,找到mitmproxy证书,打开设置选项,选择“始终信任”:
mac环境下证书配置过程如下:
将电脑和手机连接同一局域网,设置手机代理为电脑ip,端口号为8080
然后手机访问mitm.it,下载对于手机系统的证书。
mitmproxy的使用
运行mitmproxy:1
mitmproxy
运行成功后,只需要在手机浏览器上访问任意网页或浏览任意App,mitmproxy页面上就会呈现出手机的所有请求:
这就相当于在浏览器中打开开发者工具监听到的请求。