☰
QT 5.15.0 在线安装卡29%?Fiddler镜像分流与分批安装实战
2026/10/27 11:54:40 网站建设 项目流程

简介:这份PDF文档面向需要在Windows平台搭建Qt开发环境的程序员与嵌入式开发者,针对Qt 5.15.0改为在线安装后官方源下载缓慢、安装程序频繁崩溃、国内镜像直连仍因数据量过大而中途失败等痛点,给出可落地的代理与分批安装解决思路。文档围绕Fiddler 4代理规则配置、清华等国内镜像站点替换、先装基本模块再通过控制面板“更改”方式少量多次增补组件等关键环节展开,并附有规则代码与操作截图,便于读者对照复现、排查卡在29%等典型失败场景。资源包共1个PDF文件,大小约833KB,轻量易存,适合随时查阅。目前已有12105人学习下载,说明该方案在Qt安装实践中具有较高的参考价值,适合被在线安装问题困扰、希望稳定完成环境部署的开发者收藏使用。

1. QT 5.15.0 在线安装卡在 29%:一份能落地的镜像分流方案

装过 QT 5.15.0 的人大概都见过那个画面:进度条爬到 29% 左右,安装器一声不吭地消失,或者干脆卡死不动。这不是网络差,也不是机器配置不够,而是官方在线安装器在拉取组件元数据和包体时,单连接数据量太大、链路又远,超时和内存占用一起爆掉。这份资源给出的思路很直接:用 Fiddler 4 做请求改写,把download.qt.io的在线安装请求分流到国内镜像,再配合“先装基本模块、后少量多次补组件”的节奏,绕开一次性拉满导致的中断。它适合正在配 QT 5.15.0 开发环境、被在线安装器反复劝退的从业者,也适合需要给团队批量部署 QT 环境的人。下面按“原理怎么立住、规则怎么写、组件怎么分批、坑在哪”拆开讲。

2. 在线安装器为什么会在 29% 崩:请求链路与镜像分流原理

QT 5.15.0 之后官方主推在线安装器,安装器本身只是个壳,真正干活的是它向download.qt.io发起的一串 HTTP 请求:先取仓库索引和组件元数据,再按你勾选的组件逐个下载压缩包。问题出在两个地方:一是元数据请求和包体请求走同一条远端链路,链路一抖,安装器没有断点续传的兜底,直接判定失败;二是国内访问官方源时单连接吞吐低,安装器把大量响应缓在内存里,数据量一大就顶到上限。29% 这个位置通常对应“元数据取完、开始拉第一批组件包”的节点,所以看起来像是卡在某个固定百分比,其实是第一批大包把内存和超时同时压垮了。

常见做法是用代理工具做请求改写,把发往官方源的请求在本地拦下来,改写到国内镜像的对应路径。Fiddler 4 的OnBeforeRequest钩子正好干这件事:它在请求发出前拿到oSession,你可以判断主机名和路径前缀,然后替换hostname和PathAndQuery。这样做的好处是不用改安装器本身,也不用动系统代理设置,规则只对匹配的请求生效,其他流量不受影响。

选镜像时要注意路径映射不是简单换域名。清华镜像的 QT 在线仓库路径是/qt/online/,官方是/online/,所以替换时要把/online/换成/qt/online/;不同镜像的目录结构不一样,有的把在线仓库放在/qtproject/online/下,规则里的替换串必须跟着改。这也是为什么直接照抄别人的规则经常失败——路径对不上,镜像返回 404,安装器照样崩。

还有一个容易被忽略的点:镜像同步有延迟。QT 5.15.0 刚发布那阵,部分镜像的在线仓库还没同步全,你改写到镜像后拿到的是旧索引或缺包,安装器会在校验阶段报错。所以规则生效后先别急着勾一堆组件,先用最小集合验证镜像是否可用,再逐步加量。

提示:Fiddler 4 只负责改写请求,不负责加速。镜像本身的速度取决于你到镜像站的链路,规则写对之后如果还是慢,换一个同步更全的镜像再试。

3. 用 Fiddler 4 写请求改写规则:从菜单到脚本的完整操作

3.1 启用规则入口与脚本编辑位置

Fiddler 4 装好后,先确认抓包是通的:打开软件,浏览器随便访问一个页面,左侧会话列表能看到请求进来,说明本地代理链路正常。然后走菜单Rules -> Customize Rules,这会打开CustomRules.js脚本文件。这个文件里有一堆钩子函数,我们要找的是OnBeforeRequest,它在一个static function OnBeforeRequest(oSession: Session)的函数体里。如果菜单里找不到,也可以直接按Ctrl+R打开同一个文件。

脚本编辑区里通常已经有一段示例代码,别删,在函数体开头插入自己的规则就行。改完按Ctrl+S保存,Fiddler 会自动重载脚本,不需要重启。保存时如果弹出语法错误提示,说明改坏了,按Ctrl+Z撤回再改。

3.2 清华镜像的改写规则与参数说明

下面这段是资源里给出的清华镜像规则,我按实际使用补了注释和边界判断:

// 在 OnBeforeRequest 函数体内插入 // 只拦截发往官方在线仓库的请求,避免误伤其他流量 if (oSession.HostnameIs("download.qt.io") && oSession.PathAndQuery.StartsWith("/online/")) { // 目标镜像主机名,清华的 QT 在线仓库在这里 oSession.hostname = "mirrors.tuna.tsinghua.edu.cn"; // 路径映射:官方 /online/ 对应镜像 /qt/online/ // 注意 Replace 只替换第一个匹配,路径前缀固定所以够用 oSession.PathAndQuery = oSession.PathAndQuery.Replace("/online/", "/qt/online/"); }

这段逻辑的关键在三个判断:HostnameIs精确匹配官方域名,StartsWith("/online/")限定只改在线仓库路径,替换时把前缀整体换掉。参数上,hostname赋值只改主机名,端口和协议保持不变;PathAndQuery是路径加查询串,替换时查询串会原样保留,所以镜像站如果对查询参数有校验,一般也能通过。

改完之后在 Fiddler 里看会话列表,发往download.qt.io/online/...的请求应该显示为发往mirrors.tuna.tsinghua.edu.cn/qt/online/...,状态码 200 或 206 才算通。如果看到 404,多半是镜像路径不对,换一个镜像的映射再试。

3.3 备选镜像的规则切换与验证

资源里还给了北外和华科两个备选,但默认是注释掉的。切换时把清华那段注释掉,放开目标镜像那段,注意华科的路径映射是/qtproject/online/,和清华不一样:

// 北京外国语大学镜像(取消注释即可启用) // if (oSession.HostnameIs("download.qt.io") && // oSession.PathAndQuery.StartsWith("/online/")) { // oSession.hostname = "mirrors.bfsu.edu.cn"; // oSession.PathAndQuery = oSession.PathAndQuery.Replace("/online/", "/qt/online/"); // } // 华中科技大学镜像(路径前缀不同,注意替换串) // if (oSession.HostnameIs("download.qt.io") && // oSession.PathAndQuery.StartsWith("/online/")) { // oSession.hostname = "mirrors.ustc.edu.cn"; // oSession.PathAndQuery = oSession.PathAndQuery.Replace("/online/", "/qtproject/online/"); // }

同一时间只启用一段规则,别把多个if同时放开,否则第一个匹配后hostname已经被改掉,后面的判断基于改后的值,行为不可预期。验证方法是:启用一段规则后,在 Fiddler 里清空会话,启动安装器,观察前几个请求是否被正确改写、返回码是否正常。三个镜像可以轮着试,哪个同步全、响应快就用哪个。

注意:镜像站对在线仓库的同步策略不同,有的只同步正式版,有的连预览版一起同步。装 5.15.0 正式版一般没问题,装其他版本前先确认镜像里有对应目录。

4. 先装基本模块再“更改”补组件:分批安装的节奏控制

4.1 最小安装集的选择

规则通了之后,别急着在安装器里把组件全勾上。资源里的核心经验是“少量多次”:第一次只装最基本的内容,也就是安装器默认勾选的那部分——通常是 QT 核心库、对应编译器和基础工具。这一步的数据量最小,最容易一次成功。安装器走到组件选择页时,把额外的模块、示例、源码包全部取消,只留默认项,然后开始安装。

为什么这一步能成?因为基本模块的包体总量在镜像链路的承受范围内,安装器不需要在内存里堆太多待写数据,超时窗口也够用。29% 那个坎,本质是第一批大包同时到达压垮了缓冲,最小安装集把第一批包体压到很小,自然就过去了。

4.2 控制面板“更改”补装的操作路径

基本安装完成后,不要重新跑在线安装器。走系统控制面板的程序列表,找到 QT 对应的条目,右键选“更改”,会重新拉起安装器的维护模式。这个模式复用已安装的目录和配置,只下载你新勾选的组件,数据量按勾选量分批走。

操作节奏建议这样:每次只加一到两个模块,装完再进“更改”加下一批。比如先补 Qt Charts 和 Qt Data Visualization,装完再补 Qt WebEngine,最后补源码和示例。每批装完在 QT Creator 里随便建个空工程编译一下,确认工具链没被破坏,再继续下一批。这个习惯看着麻烦,但比一次性失败重来省时间——失败重来意味着前面下载的包可能白费,而分批装每批都是独立成功。

4.3 分批粒度的判断依据

分批不是越细越好。判断粒度看两个信号:一是单批下载时长,如果某批超过十几分钟还没结束,说明这批包体偏大,下一批减量;二是安装器内存占用,任务管理器里盯着安装器进程,内存曲线持续爬升不回落,就是缓冲在堆积,赶紧减小下一批的勾选量。常见做法是把大模块单独成批,比如 Qt WebEngine 这种几百 MB 的,一次只装它一个,小模块可以两三个一起。

装完之后验证完整性:打开 QT Creator,检查套件(Kit)列表里编译器和 QT 版本是否齐全,随便建一个控制台工程编译运行。如果编译报找不到头文件,多半是某个模块没装上,回“更改”里补对应模块即可,不用整个重装。

5. 这套方案最容易翻车的几个地方:排查清单

5.1 规则生效但安装器仍崩在 29%

现象:Fiddler 会话列表里请求已经改写到镜像,返回码也正常,但安装器还是在 29% 附近退出。

原因:镜像同步不全,元数据能取到,但第一批组件包在镜像上缺失或版本不匹配,安装器拿到 404 或校验失败后没有友好提示,直接崩。

解决:换镜像重试,优先选同步状态页显示完整的镜像;或者在 Fiddler 里过滤出返回码非 200 的请求,看是哪个包路径出的问题,对照镜像目录确认该包是否存在。确认镜像缺包就换源,别在缺包的镜像上反复试。

5.2 改写后大量请求 404

现象:规则启用后,安装器报网络错误,Fiddler 里一片 404。

原因:路径映射写错。不同镜像的在线仓库前缀不一样,清华是/qt/online/,华科是/qtproject/online/,把 A 镜像的替换串用到 B 镜像上必然 404。

解决:逐个镜像核对路径前缀,改完先在浏览器里手动拼一个镜像 URL 访问,能返回内容再启用规则。规则里的Replace只替换第一个匹配,如果路径里出现多个/online/片段,要确认替换位置是否正确。

5.3 Fiddler 内存耗尽导致改写中断

现象:安装到一半 Fiddler 进程内存暴涨,系统变卡,随后安装器失败。

原因:Fiddler 默认会缓存会话和响应体,大文件下载时缓存堆积。资源里提到“数据量太大 Fiddler 会耗尽内存”,说的就是这个。

解决:在 Fiddler 设置里限制会话缓存,或者安装期间定期清空会话列表(Ctrl+X);更彻底的做法是在OnBeforeRequest里对匹配的请求设置oSession.oRequest.headers.Remove("Accept-Encoding")之外,还可以用oSession["x-no-decrypt"]="true"减少解密开销。安装期间别开着其他抓包工具,减少干扰。

5.4 分批安装后工具链不完整

现象:组件都装完了,QT Creator 里建工程编译报错,提示找不到某个库或头文件。

原因:分批安装时漏勾了依赖模块,或者某批安装中途失败但安装器没报错,组件处于半装状态。

解决:回控制面板“更改”,对照 QT 版本对应的模块清单逐项核对;编译报错时看报错的头文件名,反查属于哪个模块,补装该模块。装完每批都做一次空工程编译验证,比最后一次性排查省事。

5.5 系统代理与 Fiddler 冲突

现象:规则和镜像都确认没问题,但安装器完全不走 Fiddler,会话列表里看不到 QT 的请求。

原因:安装器没有继承系统代理,或者系统代理被其他工具占用,Fiddler 没拿到流量。

解决:确认 Fiddler 的Tools -> Options -> Connections里端口和系统代理设置正确;安装器启动前先在 Fiddler 里确认能抓到浏览器的请求,证明代理链路通;如果安装器是独立进程且不读系统代理,需要在 Fiddler 里开启“捕获所有进程”并确认安装器没有被其他代理工具接管。

6. 把规则固化成可复用脚本:一次配置反复用的小技巧

这套流程跑通一次之后,最值得做的是把规则和节奏固化成可复用的东西,而不是每次装环境都从头调。我的习惯是把OnBeforeRequest里的镜像规则单独存成一个片段文件,按镜像分三份,文件名带上镜像标识,切换时整段替换,避免手改替换串出错。更进一步,可以把“最小安装集 + 分批补组件”的勾选顺序记成一个清单,每批装完打勾,下次装同版本环境直接照单执行。

验证规则是否真的生效,别只看安装器进度条。一个更硬的验证方法是:规则启用后,在 Fiddler 里对download.qt.io设一个断点,启动安装器,看第一个请求是否被改写、改写后的 URL 在浏览器里能否直接访问到内容。能访问到内容,说明镜像路径和同步状态都没问题,再放开断点让安装继续。这个动作花不了一分钟,但能挡掉大部分“规则写了但没生效”的无效重试。

还有一个细节:镜像的在线仓库会随版本更新调整目录结构,今天能用的替换串,过几个月可能因为镜像改版失效。所以规则里别写死太多层路径,尽量只替换必要的前缀,剩下的交给镜像自己解析。我一般会在规则旁边留一行注释,写明这条规则对应的镜像路径和验证日期,下次失效时一眼能看出是镜像改版还是规则写错。

从那以后我每次配 QT 环境,都强制先跑一遍“断点验证镜像 URL”再开始装,宁可多花一分钟确认,也不在 29% 那个坎上反复赌运气。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询