Charles是一个HTTP代理服务器,HTTP监视器,反转代理服务器,当浏览器连接Charles的代理访问互联网时,Charles可以监控浏览器发送和接收的所有数据。
在开发OpenHarmony/HarmonyOS应用开发时,我们使用的是@ohos/axios来进行网络请求。在开发的过程中,我看到很多伙伴使用了Charles来调试与服务器端的网络通讯协议,以及分析网络包的数据,并且收到了很多关于@ohos/axios支持设置代理的issue。
Charles 是在PC端常用的网络封包截取工具,通过将自己设置成系统的网络访问代理服务器,使得所有的网络访问请求都通过它来完成,从而实现了网络封包的截取和分析。Charles 主要的功能包括:
首先,打开浏览器访问 Charles官网 ,下载相应系统的 Charles 安装包,然后安装即可:
启动后,点击ProxyàProxy Setting设置代理端口,如下图设置端口为8888。
然后,通过如下命令验证代理是否正常启动。
curl -x 127.0.0.1:8888 http://www.baidu.com
@ohos/axios 2.2.0-rc.0及以上版本支持手动代理的设置,只需要保证PC和OpenHarmony开发板在同一个局域网下,即可抓到网络请求包。
// 发送一个get请求,使用代理
axios<string, AxiosResponse<string>, null>({
method: "get",
url: 'http://www.baidu.com',
proxy:{
host: '192.168.1,23',
port: 8888,
exclusionList:[]
}
}).then((res: AxiosResponse) => {
console.info('result:' + JSON.stringify(res.data));
}).catch((error: AxiosError) => {
console.error(error.message);
})
对于Https请求,我们需要导出CA根证书。依次选择HelpàSSLProxying -->Save Charles Root Certificate 保存成根证书到桌面Desktop.pem。
然后,点击“HelpàSSLProxyingàInstall Charles Root Certificateà”安装证书,点击Proxy -->? SSLProxy Settings在include添加*.和.443。
点击Proxy -->? ProxySettings 勾选Enable transparent HTTP proxying。
随后再次请求,设置代理和根证书Desktop.pem。
// 发送一个get请求,使用代理,并使用CA根证书
axios<string, AxiosResponse<string>, null>({
method: "get",
url: 'https://1.94.37.200:8080/user/getUserByUuid?userUuid=1',
proxy:{
host: '192.168.1,23',
port: 8888 ,
exclusionList:[]
},
caPath: '', //ca证书路径(应用目录getContext().filesDir + "/Desktop.pem"。目前我是把Desktop.pem放到rawfile目录下,在abouttoaperar时先把证书拷贝到filesDir下)
提示:如果需要能抓到https接口返回的内容,需要把charles的证书和网站的证书合并(文本文件合并),这样charles显示出返回的数据。