最近在进行一些iOS网络、多线程的开发与学习,需要用到一些网络上的数据。自己搭建服务器,写接口,显然成本太高。
而Charles轻松解决了这个问题。
Charles通常用来抓取本地的网络封包,但是当需要时,也可以用它来抓取其它设备上的网络请求。
下面以iOS为例,讲解如何抓取网易新闻:
首先需要将Charles的代理功能打开。在Charles的菜单中选择Proxy -> Proxy Settings -> 勾选 Enable transparent HTTP proxying
让手机的网络与电脑的网络在同一个局域网,并设置手机的代理为电脑的IP
上一步设置成功后Charles会弹出如下提示:
选择Allow。到了这一步,就算配置成功了,在iPhone上打开网易新闻,执行一些需要请求数据的操作(刷新、换页等)。Charles就会自动截取到一些网络请求:
在这里,抓取到的数据出现了乱码,有两种方法可以解决这个问题:将当前请求的url拷贝到浏览器中显示,可以选择所需要的任意编码。
修改Charles配置:在应用程序中找到Charles -> 显示包内容 -> 修改Info.plist文件 Java -> VMOptions 为-Xmx256m -Dfile.encoding=UTF-8
重新打开Charles并进行新的网络活动就会发现,文字可以正常显示了:
至此,整个过程已经完成,可以拿抓取到的一些数据包进行学习啦!
Tips:
有时候发现网络请求太多,这时可以对网络请求进行过滤,在Charles的菜单中选择Proxy -> Recoding Settings 在弹出的面板中选择Include 添加一些规则:
这里的意思是不过滤匹配c.m.163.com这个地址的网络封包