版本:v4.5.6
獲取http請(qǐng)求
對(duì)mac進(jìn)行代理
Proxy-->macOS Proxy打開(kāi)代理谆级,使得Mac上所有請(qǐng)求都通過(guò)Charles進(jìn)行代理皿伺。
Proxy-->Proxy Setting設(shè)置監(jiān)聽(tīng)端口號(hào):8888
獲取電腦ip地址:Help-->Local Ip Address
手機(jī)連擊wifi奈籽,手機(jī)和電腦連接必須在同一個(gè)wifi下市咽,然后手機(jī)連接代理
設(shè)置完成后垂涯,手機(jī)打開(kāi)一個(gè)網(wǎng)址烁焙,charles就可以獲取手機(jī)訪問(wèn)的包了。
charles獲取https請(qǐng)求
http我們可以獲取集币,但是網(wǎng)站是https的考阱,如果想解析https包,就需要安裝證書(shū)了鞠苟。
Help-->SSL Proxying-->install Charles Root Certificate乞榨,首先在mac安裝CA證書(shū)。
然后始終信任該證書(shū):
Help-->SSL Proxying-->Install Charles Root Certificate On...当娱,然后生成手機(jī)證書(shū)吃既。
Help-->SSl Proxying-->Save...,然后保存該證書(shū)跨细,會(huì)生成類(lèi)似Charles-ssl-proxying.pem文件鹦倚,把該文件后綴改為.crt,然后發(fā)送到Android手機(jī)冀惭,進(jìn)行安裝即可震叙。
配置SSL代理:
添加要監(jiān)聽(tīng)的域名,支持*通配符散休,端口一般443
在Android7.0手機(jī)獲取https接口會(huì)出現(xiàn)unknown情況媒楼。系統(tǒng)不再信任用戶導(dǎo)入的證書(shū),自己項(xiàng)目里的自簽名證書(shū)也會(huì)不受信任戚丸。這樣導(dǎo)致划址,抓包軟件可能抓不到https請(qǐng)求。如果你的證書(shū)不是ca證書(shū)限府,是自簽名的證書(shū)夺颤,將無(wú)法請(qǐng)求服務(wù)器。谷歌在開(kāi)發(fā)者文檔上推薦解決方案:https://developer.android.google.cn/training/articles/security-config
1胁勺、在項(xiàng)目目錄main/res/xml下新建network-security-config.xml文件
2世澜、在AndroidManifest.xml文件下的application節(jié)點(diǎn)添加
android:networkSecurityConfig="@xml/network_security_config"
3、charles.pem是從Charles-ssl-proxying-certificate.crt復(fù)制的內(nèi)容(用文本打開(kāi))姻几,放到項(xiàng)目raw/charles.pem下
創(chuàng)建network_security_config.xml
在res文件夾下創(chuàng)建xml文件夾宜狐,在xml文件下創(chuàng)建network_security_config.xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config>
<domain includeSubdomains="true">baidu.com</domain>
<trust-anchors>
<certificates src="@raw/charles" />
</trust-anchors>
</domain-config>
<domain-config>
<domain includeSubdomains="true">tabao.com</domain>
<trust-anchors>
<certificates src="@raw/charles" />
</trust-anchors>
</domain-config>
<debug-overrides>
<trust-anchors>
<certificates src="user" />
</trust-anchors>
</debug-overrides>
</network-security-config>
通過(guò)配置多個(gè)domain字段势告,把測(cè)試環(huán)境域名加上,過(guò)濾正式環(huán)境域名抚恒。這樣只抓去測(cè)試環(huán)境域名咱台。如果debug下抓正式環(huán)境的數(shù)據(jù),在domain-config添加debug-overrides節(jié)點(diǎn)俭驮。這樣只在debug下才能抓包
<network-security-config>
<domain-config>
<debug-overrides>
<domain includeSubdomains="true">正式環(huán)境域名</domain>
</debug-overrides>
<domain includeSubdomains="false">測(cè)試環(huán)境域名</domain>
<trust-anchors>
<certificates src="user"/>
</trust-anchors>
</domain-config>
</network-security-config>
通過(guò)在gradle配置里面設(shè)置一個(gè)boolean值來(lái)區(qū)分測(cè)試包還是正式包回溺,如果是測(cè)試包,那么添加這個(gè)net_config的配置混萝,否則正式包不配置
比如你的環(huán)境有如下域名 test.csdn.com,dev.csdn.com,uat.csdn.com, 那么 你只要添加csdn.com就能把這三個(gè)域名都包含進(jìn)來(lái)遗遵。注意includeSubdomains必須為true才是模糊匹配,否則是精確匹配
Charles斷點(diǎn)
選中要抓包的url逸嘀,然后右鍵選擇Breakpoints
然后在請(qǐng)求這個(gè)地址车要,會(huì)出現(xiàn)兩次斷點(diǎn),第一次是請(qǐng)求斷點(diǎn)用來(lái)修改請(qǐng)求參數(shù)崭倘;
第二次是請(qǐng)求回調(diào)斷點(diǎn)翼岁,用來(lái)修改返回結(jié)果。
在Edit Response中可以對(duì)服務(wù)器返回內(nèi)容進(jìn)行修改司光。點(diǎn)擊”Execute”進(jìn)行提交琅坡。
可以很方便的用戶修改后臺(tái)數(shù)據(jù)的返回信息和請(qǐng)求參數(shù)等。