尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Win10下Charles抓包实战:从解密HTTPS到手机App调试
实习第一天带我的导师丢过来一句话“把电脑收拾利索把Charles装上等会儿联调要抓包看登录接口。”我那时候以为Charles是个什么前端框架等装完打开才发现它就是一台架在本机上的HTTP代理服务器专门用来“看”程序发出去的每一条请求和返回的每一个响应。现在回想起来win10下Charles的使用几乎贯穿了之后整个实习期从最简单的抓HTTP接口到给HTTPS做解密再到把手机上的App流量拉回电脑排查每一步都踩过不少坑。这篇笔记不打算写成官方文档只记录我在win10环境里从零开始折腾Charles的真实过程。适合刚装好Charles还不知道怎么用的实习生也适合被HTTPS证书和手机抓包绕晕的同学。整个使用逻辑其实并不复杂复杂的是你在装证书、开代理、连手机时会遇到的各种“预期之外”的情况这些恰恰是文档里不会写的东西。1. 代理调试工具的本质Charles在win10上到底做了什么1.1 流量多走一道“驿站”你才看得见请求的完整链路要理解Charles先理解它的工作方式。Charles启动后会在本机开一个HTTP代理服务默认监听8888端口。只要是经过这个代理的流量它都会记录下来并在界面上展示。你可以把它想象成一个快递驿站正常情况下快递员把包裹直接送到收件人手里现在所有包裹都先到驿站扫描登记一遍你就能看到包裹从哪来、往哪去、里面装着什么。对于调试来说这一道“中转”就是全部价值。请求没经过Charles之前你只能靠后端日志猜前端发了什么经过Charles之后请求URL、请求头、请求体、响应状态码、响应体、耗时全部摆在眼前。前后端联调时双方扯皮最多的“参数对不上”“状态码为什么是500”用Charles看一眼就水落石出。win10下Charles接管流量的方式是修改系统代理。启动Charles之后你打开“设置-网络和Internet-代理”能看见代理服务器地址变成了127.0.0.1端口8888。Charles退出时又会把系统代理恢复。这个机制方便但也有坑如果Charles不是正常退出的或者被任务管理器强杀系统代理可能残留后面我会专门讲这个坑。1.2 安装前置条件JDK版本与端口占用检查装Charles本身不算难去官网下载Windows 64位安装包一路Next就行。真正容易翻车的是运行环境。Charles是Java写的win10机器上如果没有对应版本的JDK或JRE双击图标会直接弹“Failed to create the Java Virtual Machine”之类的错误。我自己遇到过一次当时以为是安装包坏了后来才发现是机器上Java版本太老。建议安装之前先打开CMD执行java -version确认版本不低于8。另外有一个很实际的建议如果电脑上已经装了Fiddler或其他同类抓包工具先全部退出再启动Charles。它们默认监听同一个代理端口两个一起开轻则一个抓到包一个抓不到重则直接报端口被占。我实习那会儿就同时开着两个工具结果Charles报“Port 8888 is not available”查了半天才发现是Fiddler还挂在后台。免费版Charles每次启动只能用30分钟到时间会自动退出。实习期间如果只是临时用忍一忍也行如果整个实习期都要靠它联调建议直接找导师要公司授权正版许可填进去就省心了。1.3 启动之后先搞懂这几个开关再动手Charles装好启动后界面乍一看有点懵左边是空的Session列表上面一排菜单栏底部有状态栏。新手最容易犯的错是打开工具之后满心期待看流量结果列表里空空如也然后开始怀疑安装有问题。这时候先看工具栏上的红点。红点是录制开关只有它亮着Charles才会记录流量。这个开关特别容易误触快捷键是CtrlShiftR记不清什么时候就把它按灭了。红点变灰之后代理还在但Charles什么都不记录。所以“打不开抓不到包”第一件事永远是检查红点状态。工具栏上还有一个扫把图标作用是清空当前列表。每次开始新一轮调试之前我习惯先点一下扫把把上一轮日志清掉这样新请求不会被淹没在一堆旧记录里。旁边的乌龟图标是限速开关放到后面弱网模拟的时候再说。2. 从HTTP明文到HTTPS解密根证书与SSL Proxying是分水岭2.1 为什么默认只能看到CONNECT请求第一次用Charles抓HTTPS接口时我盯着Session列表愣了很久里面确实有请求记录但全部是“CONNECT www.xxx.com:443”这种格式。没有URL路径没有参数没有响应体完全看不出HTTP请求本来的样子。这个现象的原因不难理解。HTTPS流量在进入Charles之前已经被TLS加密了Charles作为中转方只能看到“你准备和哪个域名、哪个端口建立加密连接”至于连接建立之后传输的HTTP内容它是看不到的。列表里的CONNECT记录本质上只是一条“隧道建立请求”。想让Charles看到加密内容就必须做中间人解密为每个新的HTTPS连接动态签发一张证书让客户端误以为Charles就是目标服务器从而在Charles这里完成解密再转发给真正的服务器。这套机制说起来有点绕但操作起来不复杂关键就是两件事装根证书、启用SSL Proxying。2.2 win10安装Charles根证书存储位置比想象中更重要证书安装路径是菜单栏Help - SSL Proxying - Install Charles Root Certificate。Windows会弹出证书导入向导一路Next也能装完但“一路Next”恰恰是后面坑的源头。证书存储位置必须选“受信任的根证书颁发机构”。如果图省事直接点下一步Windows可能会把证书放进“个人”存储区那样浏览器和系统都不会信任它解密依然失败。我第一次装的时候没注意这个细节结果Chrome一直报证书无效后来导师过来看了一眼摇头说“证书装错地方了”删掉重装一遍才正常。装完之后建议验证一下WinR输入certmgr.msc打开证书管理器展开“受信任的根证书颁发机构-证书”在里面能找到Charles开头的根证书这才算真正装好。win10上如果浏览器是Chrome或Edge它们会严格校验证书链根证书只要不在正确的位置HTTPS解密就一定失败。这里多说一句安全提醒根证书意味着“信任这个CA签发的一切证书”所以只装在自己的调试设备上。确认不用之后可以在证书管理器里手动删除养成习惯没有坏处。2.3 SSL Proxying的host匹配规则怎么写装上根证书不代表立刻就能解密还需要显式告诉Charles“你要解密哪些域名”。打开Proxy - SSL Proxying Settings勾选Enable SSL Proxying然后在Location列表里添加规则。规则格式不复杂但很多人写错。我见过最粗暴的用法是直接填一个*意思是所有域名、所有端口都尝试解密。实习调试阶段这么干确实省事所有HTTPS请求都能看但代价是流量多、噪音大还可能被公司网络的安全策略拦截所以更推荐按需添加比如只填api.test.example.com:443。规则里支持几种常见写法我后来整理成了一张表规则写法匹配范围*所有域名所有端口*.example.comexample.com及其所有子域名api.example.com仅api.example.com这个域名api.example.com:8443仅该域名的8443端口改完SSL Proxying配置后很多情况下需要重启Charles或者取消录制再重新打开录制才会生效。我一开始改完规则傻等半天以为哪里配错了其实只是缓存没刷新。另外有个小习惯规则多余之后及时删掉避免以后抓包时列表里混入一堆无关流量。2.4 解密成功后怎么快速看懂一条接口解密生效后Session列表会直接显示请求方法、完整URL、状态码、耗时。点中任意一条请求右侧Contents区域能看到Request和Response两个方向的内容响应如果是JSONCharles会按照格式化视图显示比看压缩成一坨的原始报文舒服得多。实习期我看得最多的就是登录接口选中请求看Form表单或JSON Body里的字段名再对照后端给的接口文档马上就能确认参数传对了没有。响应里如果出现中文乱码优先点右下的Raw视图看响应头里的charset字段是什么编码再决定切到什么显示方式。后面我会专门讲乱码处理这里先不展开。3. 实习联调最常用的五类操作Repeat、Compose、Breakpoints、Rewrite与Map Local3.1 Repeat与Compose改参数重发请求的两种方式联调过程中“重发一遍刚才那个请求”是最高频的操作。右键点击任意一条请求记录选择RepeatCharles会用完全相同的参数再发一次。这个功能在验证后端是不是偶发问题时尤其好用你说接口超时我说刚试是好用的那就Repeat十次看概率争论立刻结束。Repeat原样重发Compose则允许修改后重发。右键选择Compose窗口里可以改URL、请求头、请求体改完点Execute发送。我踩过一个典型场景后端说登录接口的字段名是user_token前端代码里写的却是access_token两边都觉得自己没传错。我用Compose把参数名改成后端说的那个Execute一发接口立刻通了问题定位不超过两分钟。Compose窗口里改完的内容不会被保存成正式规则适合这种“临时改一下看看结果”的场景。3.2 Breakpoints在请求和响应上人为“截停”Breakpoints是我最喜欢的调试功能没有之一。它的逻辑是给某个URL设置断点请求发出前或者响应返回前Charles都会把流程卡住让你手动修改Request或Response改完再放行。右键一条请求 - Enable Breakpoint就能设置。之后这条请求再出现时会变成红色点击Edit Request可以改请求参数执行完再点Execute放行响应回来时同理点击Edit Response可以直接篡改返回的数据。比如接口还没实现某个异常分支你想测试前端对报错的处理用断点把响应体改成{code:500,msg:server error}再放行前端表现一目了然。使用断点有两个容易忽视的细节一是断点规则如果设置成整个域名那这个域名下的所有请求都会被截停体验极其酸爽二是用完的断点规则不会自动消失需要右键取消或者到Breakpoint Settings里删除。实习时有次我忘了删断点结果同事跑过来说“接口怎么卡住了”我一看自己的断点还在桌上摆着装死。3.3 Rewrite把“每次都要改”变成自动规则Breakpoints适合“偶尔改一次”但如果“每次都加某个请求头”“每次都要把响应里的字段改掉”再手动断点就太累了。这时候上Rewrite。Rewrite位于Tools - Rewrite本质是一套“匹配并修改”规则你可以按Host、URL、Header、Body等维度匹配流量然后执行修改、添加或删除动作。我在实习里用得最多的场景是联调环境切换。前端代码里写死了正式环境的域名后端说“你改成测试环境地址再试”如果每次手动改代码太麻烦用Rewrite把请求Host从正式环境域名改成测试环境域名前端什么都不用动流量到Charles这里自动被改写。另一个常用场景是批量加Header。调试接口需要鉴权每次手动登录拿token太麻烦就用Rewrite统一在请求头里加上Authorization: Bearer test_token只要后端不校验token时效一整天都能顺畅联调。注意Rewrite规则一旦生效影响的范围是全局的所以配置完之后要心里有数别改完忘了关后面排错时被自己写的规则坑了都不知道。3.4 Map Local与Map Remote用本地文件替换线上响应Map Local的意思是当请求命中某个URL规则时Charles不向服务器发请求而是直接返回你指定的本地文件内容。典型场景是后端接口还没写好但前端需要先联调页面。用Map Local把接口URL映射到一个本地mock_data.json前端请求直接拿到假数据页面照样能跑起来。配置位置在Tools - Map Local勾选Enable Map Local后添加一条URL匹配规则指向本地文件路径。这里有个细节本地文件如果改了Charles会直接读取最新内容不需要重启所以你可以边写mock数据边刷新页面看效果非常顺手。唯一要注意的是映射文件路径里尽量别有中文和空格有些Windows环境下Charles读取映射文件会出问题表现就是返回404或者数据为空。Map Remote则是把某个地址的请求转发到另一个地址适合“把测试环境指到本地开发机”的场景。比如后端同事在本地起了服务你不想改前端代码用Map Remote把测试环境域名指向他的内网IP就行。这招在跨电脑联调时很好用前提是对方机器和你处于同一个内网。五种操作的适用场景我整理了一下功能典型场景注意点Repeat验证偶发问题、接口幂等性原样重发不带任何修改Compose临时改参数重发修改不保存适合快速验证Breakpoints改请求/响应做异常测试规则用完必须删除Rewrite批量换Host、改Header全局生效注意关闭Map Local用本地mock数据替代响应文件路径避免中文和空格4. 手机App抓包让Android和iOS的流量从Windows这里过4.1 第一步先解决“同一局域网”和Windows防火墙Charles能抓电脑上浏览器的流量但实习里更多时候要抓的是手机App。手机和电脑必须在同一个局域网内如果电脑连的是Wi-Fi手机也连同一个Wi-Fi就行如果电脑插的是网线可以在win10设置里打开“移动热点”让手机连上。手机连网之后进Wi-Fi设置找到当前网络的代理选项手动配置服务器地址填电脑的IP端口填8888。电脑IP用ipconfig查一般是192.168.x.x这种格式。填完保存手机流量就会先经过电脑上的Charles。这一步最大的拦路虎是Windows防火墙。Charles第一次启动时防火墙会弹窗询问是否允许它在公共网络上通信如果你手快点了“取消”手机端就会全部连接超时。所以弹窗弹出来的时候一定要选“允许访问”网络类型选“专用网络”。万一错过了去控制面板的防火墙设置里把Charles加到允许应用列表里一样可以补救。4.2 Android设备证书之外还有一个版本信任边界手机代理配好之后浏览器流量很快就能看到但App流量大概率还是HTTPS加密状态。Android手机需要用浏览器访问chls.pro/ssl下载Charles证书然后在系统设置里安装为CA证书。如果你以为装完证书就万事大吉那就太天真了。Android 7及以上系统有个默认策略普通App不信任用户手动安装的证书。也就是说哪怕你把Charles证书装进手机大多数App在发起HTTPS请求时依然会校验证书失败表现就是Charles列表里全是CONNECT或者App端报SSLHandshake错误。这个坑不是操作能解决的需要看App的代码配置。如果是自家公司的App可以找Android开发同学在工程的network_security_config.xml里把debug模式配置成信任用户证书。实习生在联调阶段打的通常是debug包加上这个配置才能顺利抓到App的HTTPS明文。如果只是抓手机浏览器的流量装证书就够了因为浏览器走的是系统证书信任链。4.3 iOS设备描述文件装完还要再开一个开关iOS端的证书安装流程比Android多一步。手机Safari浏览器打开chls.pro/ssl下载一个描述文件然后到“设置-通用”里找到刚下载的描述文件并安装。这一套流程很多人都会但装完依然抓不到包。原因在于iOS 10.3之后的版本安装描述文件不等于“完全信任”这个证书。你还需要到“设置-通用-关于本机-证书信任设置”里找到Charles根证书把“完全信任”开关打开。这一步不做证书处于“已安装但不受信任”的灰色状态App和浏览器都不会买账。iOS端还有一层限制和Android 7类似不少App为了安全只信任系统内置证书不信任用户手动安装的CA。如果是自家App可以建议开发同学在debug环境关掉证书校验或者先用手机浏览器做验证。总之iOS抓包必备三连下载描述文件、安装描述文件、打开完全信任开关三步缺一不可。4.4 手机流量常见故障CONNECT刷屏、502、断网手机配置代理之后问题不会少最典型的三个我都遇到过。第一个是列表里全是CONNECT看不到具体内容。这说明手机流量确实走到了Charles但HTTPS解密没有生效。按顺序检查手机证书装了没、iOS的信任开关开了没、SSL Proxying规则里填了对应域名没。大多数情况是证书环节掉了链子。第二个是请求返回502 Bad Gateway。这个报错的意思是Charles尝试向后端服务器转发时失败了。先确认电脑能不能正常访问该接口再检查目标服务器是否拒绝了代理来源的请求。有时候公司网络环境会统一配置HTTP代理Charles转发时会带上这些外部代理设置如果外部代理配置错了也会导致502。第三个是手机明明连着Wi-Fi却打不开任何网页。最常见原因是电脑上的Charles已经退出了但手机的代理设置还指着电脑的8888端口等于所有流量都发向一个不存在的门牌号。把手机Wi-Fi代理重新设为“无”就恢复了。这是一件小事但实习期间我已经帮同事解决过好几次。5. 高频排错笔记win10里那些让你怀疑人生的坑5.1 防火墙弹窗误点导致手机全部超时前面提到过一次防火墙弹窗这里详细整理一下排错链路。现象是手机代理配置没问题证书也装了但Charles列表里一个请求都看不到手机端网络一直转圈。如果你也遇到这个情况先别急着怀疑代理配置。回想一下Charles第一次启动时Windows防火墙是不是弹过一个“允许访问”的窗口你是不是当时点了“取消”。这个动作会直接导致外部设备无法连接Charles监听的端口手机请求根本进不来。我身边好几个实习生都栽过同一个地方因为那个弹窗往往伴随着“是否信任此应用”的措辞下意识就取消了。解决办法是到控制面板的“Windows防火墙-允许应用通过防火墙”里找到Charles或者手动添加Charles的安装目录下的exe文件然后勾选“专用网络”允许。这里只勾专用网络就够了公用网络不建议放行安全一点没坏处。5.2 端口8888被占用与代理残留Charles启动时报“Port 8888 is not available”是个经典老梗。排查手段很固定WinR打开CMD输入netstat -ano | findstr 8888看看是哪个进程占用了这个端口。如果是曾经残留的Charles进程直接去任务管理器结束掉如果是其他程序可以给Charles换一个端口比如8889位置在Proxy - Proxy Settings。端口占用只是开胃菜更有迷惑性的是代理残留。Charles非正常退出比如电脑蓝屏、任务管理器强杀后win10的系统代理设置不会自动恢复还会指着已经无人监听的8888端口。表现是浏览器打开任何网页都报连接失败但Charles明明已经关了。很多人这时候开始重装浏览器、重启电脑折腾半天。正确的处理是打开“设置-网络和Internet-代理”手动把“使用代理服务器”开关关掉系统网络立刻恢复。Charles正常退出时一般会替你做这件事但win10环境里异常退出太常见了记住这个坑能省下很多时间。5.3 证书失效明明装过却突然全部解密失败有段时间我的Charles表现很诡异上午抓HTTPS还好好的下午突然所有请求都变成SSLHandshake错误手机上的App也集体罢工。检查了代理、检查了SSL Proxying规则都没问题。最后发现是证书过期了。Charles的根证书不是永久有效的到日期之后需要重新下载安装。旧证书不删就装新证书有时候会在证书管理器里出现两个同名CA导致系统不知道该信任哪一个。建议处理流程是先在certmgr.msc里把旧Charles证书删掉然后重新执行“Install Charles Root Certificate”装到受信任的根证书颁发机构重启Charles问题通常就消失了。另外有一种情况是系统时间不对。win10如果时间偏了证书有效期校验会直接失败表现同样是无解的SSL握手错误。我一同事就是电脑时间慢了半小时排查了一下午最后对时重启解决。这种冷门坑平时遇不到但真遇到了会把你折腾到怀疑人生。5.4 中文乱码、304缓存与日志刷屏中文乱码是最容易被误判的问题。Charles的JSON视图里中文显示正常但切到Raw视图就变成一串Unicode或者乱码。这不是数据有问题而是显示方式的差异。Raw视图下如果响应头里写着charsetUTF-8大部分中文都能正常显示如果接口返回的是其他编码可以在右键菜单里手动切换字符集。304状态码也经常把人吓一跳。看到接口返回304第一反应是“是不是出错被拦截了”其实304是正常的HTTP缓存行为表示浏览器本地已有资源服务器确认资源没变不需要重新传。真想每次拿最新数据清一下浏览器缓存再重新请求就行。最后说日志刷屏。联调高峰期Charles列表里每分钟刷刷刷进来几十条资源请求JS、CSS、图片、接口混在一起找自己的请求像大海捞针。我自己的习惯是在列表底部的Filter输入框里敲API关键字过滤或者对常用调试域名右键选择Focus让这些域名的请求置顶并高亮其他流量自动折叠。这个小技巧让抓包效率明显提升尤其是接口多到不行的时候能帮你保住耐心。最后再分享一点个人体会。实习前两周我基本只用查看和Repeat后来越用越顺手才开始把Rewrite和Map Local常态化。刚上手的人我建议按这个顺序练先不开SSL Proxying抓一个HTTP网站的请求把Session列表、请求头、响应体看熟再装证书开HTTPS解密最后再连手机。这个顺序能帮你把Charles的每一步功能拆开理解出了问题也知道是哪一环。一个小技巧是把常用调试域名右键Add to Focus列表会清爽很多接口多的时候非常救命。
RELATED

相关推荐

Java课程设计打砖块小游戏:Swing+面向对象实战

Java课程设计打砖块小游戏:Swing+面向对象实战

简介:本资源是一套面向高校Java初学者与课程设计实践者的综合性小游戏开发案例集,涵盖15个完整可运行的Java桌面应用项目,如贪吃蛇、扫雷、俄罗斯方块、计算器、记事本等,适用于《Java程序设计》《面向对象编程》等课程的课程设计…

📅 2026/10/19 0:49:58
Fiddler汉化版实战指南:HTTPS抓包、证书配置与安全审计

Fiddler汉化版实战指南:HTTPS抓包、证书配置与安全审计

简介:本资源是一套面向网络安全初学者与逆向分析爱好者的抓包与反抓包实战工具集,聚焦HTTP/HTTPS流量捕获、证书信任配置及本地调试防护等典型场景。压缩包内含95个文件,主体为13个可执行程序(含Fiddler主程序、证书生成与环回启用…

📅 2026/10/19 0:49:58
C#调用MATLAB绘图:COM与Engine双路线实战指南

C#调用MATLAB绘图:COM与Engine双路线实战指南

简介:这份资源面向需要在C#项目中实现复杂图形绘制的开发者,尤其是希望借助MATLAB强大可视化能力、又不想放弃C#工程化优势的中高级程序员。内容围绕通过MATLAB Compiler SDK将M文件编译为.NET库,再在C#中调用MATLAB函数完成三维曲面绘制这一…

📅 2026/10/19 0:49:58
MORE NEWS

更多资讯

📰

【编译Chap4】求first集、follow集例题

方法 求 FIRST 集的规则 反复扫描所有产生式,以A→X1X2⋯XnA\to X_1X_2\cdots X_nA→X1​X2​⋯Xn​为例: 依次处理 XiX_iXi​(i从1 to n): 把 FIRST(Xi)−{ε}\mathrm{FIRST}(X_i)-\{\varepsilon\}FIRST(Xi​)−{…

📰

Hadoop电信客服分析链路:从混杂日志到交互式业务看板

简介:本资源是一个面向大数据初学者与电信行业数据工程师的Hadoop全栈实战项目,聚焦客服数据采集、存储、分析与可视化闭环。项目基于真实业务场景,整合Zookeeper集群协调、HBase实时存储、Flume日志采集、Kafka流式分发及HDFSMapReduce批处理…

📰

循环架构大揭秘:Dory1.0-4B 的 normalized-GPT 与混合注意力如何炼成 256K 长上下文

人工智能大模型推理模型模型量化 【免费下载链接】NVIDIA-Nemotron-Labs-Dory1.0-4B-MXFP8 项目地址: https://ai.gitcode.com/hf_mirrors/nvidia/NVIDIA-Nemotron-Labs-Dory1.0-4B-MXFP8 点击查看 免费下载 NVIDIA-Nemotron-Labs-Dory1.0-4B-MXFP8 是 NVIDIA 推出…

📰

基于溯源图与图神经网络的APT攻击链检测方法

简介:一份基于溯源图的APT攻击检测方法优化Python实现源码,适合信息安全、计算机科学、数据科学等专业学生用于毕业设计、课程设计或期末大作业。项目代码已经过功能验证,可稳定运行,并提供清晰的目录结构与注释,便于二…

📰

如何选对模型?InternVL2_5-8B-MPO-AWQ 家族 1B~78B 选型对比指南(含显存与性能权衡)

【免费下载链接】InternVL2_5-8B-MPO-AWQ 项目地址: https://ai.gitcode.com/OpenGVLab/InternVL2_5-8B-MPO-AWQ 点击查看 免费下载 如果你要在开源多模态大模型(MLLM)里选一个"性价比之王",InternVL2_5-8B-MPO-AWQ 值…

📰

蓝牙音箱箱体结构优化:抑制振动、管理气流与匹配声学负载

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬