什么是Charles?
Charles是一个网络调试和抓包工具,从原理上说他在本机开启了HTTP Proxy的服务器,然后移动端设置系统代理,之后移动端的网络访问都是通过Charles代理的,Charles分析通过代理的流量。
现在的移动开发很多都是手机端通过RESTful API的方式访问后端提供的服务,这就需要后端和前端在接口上达成约定。然而很多时候在调试后端的时候我们需要知道移动端是怎么访问我们后端的接口的:
- 调用的是哪些接口?
- 调用的HTTP Methods是什么
- 传入的参数
- 返回值
有这些信息,后端就可以很快的定位问题。然而手机端对后端开发来说常常是一个黑盒子,我们不知道这个黑盒子内部发生了什么,但是我们可以通过检测后端和黑盒子的交互来快速定位和解决问题。
为什么使用HTTP代理的方式来抓包
早些时候我维护的服务用户访问量不大,我直接使用tcpdump
和tshark
来直接获取访问服务器的网络流量:
|------| |-----------------|
| app1 |---network--->|tcpdump on server|
|------| |-----------------|
^
|------| |
| app2 |--network-----------
|------|
这样做主要有两个问题:一是客户端连接非常多时候,产生得信息量非常多,要排除干扰需要话很长的时间。特别对于访问量很大的服务器,如果有负载均衡的话这么做并没有什么卵用——你都不知道访问的是哪个服务器。第二个问题是在服务器上操作会干扰服务器本来的吞吐,如果是排查性能的问题的时候很容易出现测不准的情况。
而如果做HTTP代理的话,我们可以排除别的手机端的干扰,只针对一台手机进行测试,抓取的网络包自然也就是这一台机器与服务器之间的访问交互,这会大大省去过滤特定客户端所花费的时间。
|------| |-----------------|
| app1 |---charles proxy--->| server |
|------| |-----------------|
^
|------| |
| app2 |--network---------------------
|------|
其次这对服务器来说是透明的访问,服务器不甚至不知道客户端是否使用了HTTP代理,一视同仁的来接收和处理请求。
怎么使用Charles?
参考:
Comments: