现在分析一下这个请求和响应的细节。首先,您可以返回到概览选项卡。上面显示请求的接口URL,后面是响应状态StatusCode、请求方法等,如下图所示。这个结果和web端浏览器开发者工具抓取的结果类似。接下来单击Contents选项卡以查看请求和响应的详细信息。上半部分显示Request信息,下半部分显示Response信息。比如对于Reqeust,我们切换到Headers选项卡,可以看到Request的Headers信息;对于Response,我们切换到JSONTEXT选项卡可以看到Response的Body信息,内容已经格式化,如下图所示。由于本次请求是POST请求,所以我们还需要关心POST表单信息,切换到Form标签页即可查看,如下图。这样我们就可以在App中成功的抓取评论界面的请求和响应,并且可以查看到Response返回的JSON数据。至于其他的app,我们也可以用这个方法来分析。如果能直接分析请求的URL和参数的规则,就可以直接用程序模拟批量抓取。ResendingCharles还有一个强大的功能,可以修改捕获的请求,发送修改后的请求。点击上面的修改按钮,在左侧的列表中会出现一个以编辑图标开头的链接,表示这个链接对应的请求正在被我们修改,如下图。我们可以去掉Form中的一个字段,比如这里去掉partner字段,然后点击Remove。这时候我们已经修改了原请求中携带的FormData,然后点击下方的Execute按钮执行修改后的请求,如下图所示。可以发现,该接口的请求结果再次出现在左侧列表中,内容保持不变,如下图所示。删除Form表单中的合作伙伴字段没有任何效果,因此该字段无关紧要。有了这个功能,我们就可以方便的使用Charles进行调试了。我们可以通过修改参数、接口等来测试不同请求的响应状态,从而知道哪些参数是必须的,哪些是不需要的,参数的规律是什么,最终得到最简单的程序接口和参数形式模拟调用。结论以上内容就是通过Charles抓包分析App请求的过程。通过Charles,我们成功抓取了流经App的网络包,抓取到原始数据,还可以修改原始请求,重新发起修改后的请求进行接口测试。知道了request和response的具体信息,如果能分析出请求的url和参数的规则,直接用程序模拟批量爬取当然是最好不过了。但是随着技术的发展,App的界面往往都有key,我们无法直接找到这些规律,那怎么办呢?接下来,我们将了解使用Charles和mitmdump直接连接Python脚本实时处理捕获的Response的过程。
