还不会用 Charles?最后一遍了啊!

Charles,一个老生常谈的 HTTP 代理工具。我们平时联调或者定位线上问题都会频繁使用,这次我们再全面性的介绍下它的工作原理和使用场景。

Charles 的工作原理:

HTTP 代理工具,顾名思义它是在客户终端与互联网之间的代理服务器,可以拦截终端发出的 HTTP 请求,对其进行监听、改写等操作。常用于查看移动端请求、mock 接口、修改 HTTP 请求/响应。

安装并配置 Charles HTTPS 代理

鉴于本文的重点是如何使用 Charles,对于如何安装 请点击这里查看教程

  • 需要注意,配置 https 代理时,目前 IOS 已不支持通过打开 Charles 链接的方式下载描述文件,需要将文件下载下来传输到手机中打开。
  • Android 目前只支持代理 HTTP 请求,不支持代理 HTTPS 请求。

如何使用 Charles

Charles 的主界面

先介绍下 Charles 的主界面,其分为两种视图:

  • 一种是Structure View,根据域名路径进行分类,配合 Filter 功能查看特定域名的请求非常有用

  • 一种是 Sequence View,通过时间排序展示,并且显示了 duration。

请求详情

进入请求详情,我们可以查看到请求的全部信息,包括:

  • request 的 headers、cookies、URL payload 和 body 等数据
  • response 的 headers、set-cookie、result 等数据

HTTPS 请求代理

下面我们进行实战,将 https://shopic.sf-express.com/crm/webapp 代理到一个测试地址 http://s.sfjswl.com:10086

Map Remote

第一步,我们通过 Map Remote 能力,将 https://shopic.sf-express.com 域名转发到 http://s.sfjswl.com 域名上。

在 Tools 栏中选择「Map Remote」,不过我更推荐大家使用快捷键 option + command + M,从菜单栏中找这些小工具真的很费眼。。。

这里要注意:

  • 要确认好协议是 http 还是 https,别写错了!
  • Map Remote 只能用于 修改域名,请求路径是不会改变的。

Map Rewrite

因为 Map Remote 只能转发域名,通过第一步我们相当于把 https://shopic.sf-express.com/crm/webapp 代理到了 http://s.sfjswl.com:10086/crm/webapp,然后就需要把 url 中的 /crm/webapp 干掉。

那第二步,我们就可以通过 Map Rewrite 能力,把 /crm/webpapp 替换为 /。它的快捷键是 option + command + R

从上图我们可以看到:

  • 左侧是每个独立配置,可自由开启关闭。
  • 右侧是具体规则,Location 用来匹配路径,匹配后则进行右下角的修改操作
  • Rewrite 的功能非常强大,它可以修改 HTTP 请求的所有信息

这里我们通过 Location 匹配到了 Remote 转发后的 s.sfjswl.com:10086/crm/webapp注意这里要配的是 Remote 之后的地址 )。然后通过改写 path/crm/webapp 干掉,这样我们就顺利把 https://shopic.sf-express.com/crm/webapp 代理到 http://s.sfjswl.com:10086

下面我们再介绍一些 Charles 的常见用法:

mock 接口

承接上文,比如现在我们需要 mock 接口返回数据来还原事故现场,我们可以使用 Charles 的 Map local 功能将后端接口转发到本地的 txt 文件。这个功能的快捷键是 option + command + L

重复发送请求

前后端联调时,后端常会说:"FE再调下接口试试",这时我们就可以通过 Charles 的 Repeat 功能直接发送请求啦!

mock 慢网情况

我们可以通过 Charles 的 Throttle Settings 功能 mock 慢网的情况。它的快捷键是 shift + command + T

Record Settings

我们可以通过 Charles 的 Record Settings功能设置只监听指定域名的请求。它的快捷键是 option + command + R

BreakPoints

我们可以通过 Charles 的 BreakPoints 功能实时拦截请求,并可以修改 request 和 response,类似于 debug 代码

总结

Charles 是一个功能非常强大的 HTTP 代理工具,大大降低了我们调试移动端 h5 和小程序的难度。本文还有一些细节内容未补充比如 path 的路径匹配逻辑、Rewrite 的其他用法等,大家在配置 Charles 的过程中有任何问题欢迎留言交流!

相关推荐
難釋懷35 分钟前
Vue解决开发环境 Ajax 跨域问题
前端·vue.js·ajax
特立独行的猫a40 分钟前
Nuxt.js 中的路由配置详解
开发语言·前端·javascript·路由·nuxt·nuxtjs
咸虾米42 分钟前
在uniCloud云对象中定义dbJQL的便捷方法
前端·javascript
梨子同志44 分钟前
JavaScript Proxy 和 Reflect
前端·javascript
汤圆炒橘子1 小时前
状态策略模式的优势分析
前端
90后的晨仔1 小时前
解析鸿蒙 ArkTS 中的 Union 类型与 TypeAliases类型
前端·harmonyos
IT_陈寒1 小时前
Element Plus 2.10.0 重磅发布!新增Splitter组件
前端·人工智能·后端
挑战者6668881 小时前
vue入门环境搭建及demo运行
前端·javascript·vue.js
贩卖纯净水.1 小时前
Webpack的基本使用 - babel
前端·webpack·node.js
用户882093216672 小时前
Vue组件通信全攻略:从父子传参到全局状态管理,一篇搞定!
前端