国家政策规定,没办法,你给前面加个代理就行,或者DNS改成8.8.8.8
国家政策规定,没办法,你给前面加个代理就行,或者DNS改成8.8.8.8
这也要限制吗,那行吧😞
这也要限制吗,那行吧😞
原则是不让用github,但没墙,只是DNS污染,让一般人连不上,改DNS就可以正常访问。

原则是不让用github,但没墙,只是DNS污染,让一般人连不上,改DNS就可以正常访问。

想访问还是挺简单的,主要是我看deepin的下载器界面挺简约的,想用一下结果真要用到的场景用不了。。。。
想访问还是挺简单的,主要是我看deepin的下载器界面挺简约的,想用一下结果真要用到的场景用不了。。。。
改DNS就能访问,但运营商默认的DNS是不行的


偶尔也能直连,不能直连的时候我都用watt toolkit的,能随时开关,主要是有时候就是github不稳定想直接下载点什么东西确实太慢了,用些类似motrix的多线程下载器下起来确实更快一些

偶尔也能直连,不能直连的时候我都用watt toolkit的,能随时开关,主要是有时候就是github不稳定想直接下载点什么东西确实太慢了,用些类似motrix的多线程下载器下起来确实更快一些
下载时给地址前面加上代理就行,
比如你要下载 https://github.com/AAA/BBB/CCC.xyz
可以改成这样 https://gh-proxy.com/github.com/AAA/BBB/CCC.xyz
我这可以70MB/s,同样适用 git clone、git pull、git submodule update等
下载时给地址前面加上代理就行,
比如你要下载 https://github.com/AAA/BBB/CCC.xyz
可以改成这样 https://gh-proxy.com/github.com/AAA/BBB/CCC.xyz
我这可以70MB/s,同样适用 git clone、git pull、git submodule update等
好的,很实用,感谢帮助
就是因为这个原因,直接把deepin的下载器直接卸载了。用motrixnext比deepin的下载器更好用。


中文 


deepin 下载器无法识别 GitHub Release 链接的文件大小、无法勾选下载问题排查
UrlThread::onHttpRequest的 case 200 分支内 curl 子进程调用)response-content-disposition=attachment%3B%20filename%3D...里的%20(空格编码)在 Qtreply->url().toString()回读时被解码成真实空格;下载器随后把该含空格 URL 传给 curl 获取真实头信息,而代码里的空格转义list[1].replace(" ", "%20")被错误地包在if(list.size() > 2)中——参数列表恰好只有 2 个元素,转义永远不执行;QProcess 不经 shell 直传参数,curl 收到含空格 URL 直接报curl: (3) URL rejected: Malformed input to a URL function(exit 3、零输出)。curl 零输出时readyReadStandardOutput回调不触发、解析结果不再回传 UI,任务行停留在初始占位状态(size 为空、length=0)→ 界面按"size 为空"渲染为灰化不可用行,且该行不参与选中统计(各类勾选回调均要求length > 0才置选中),cnt恒为 0,「确定」按钮setEnabled(cnt > 0)永远禁用。GitHub 所有 Release 资产的 disposition 均采用attachment%3B%20filename%3D统一格式,因此 .deb/.zip/.sh 全部命中,与实测吻合。1. 问题描述
1.1 现象
在 deepin 下载器中新建下载任务,粘贴 GitHub Release 资产直链:
1.2 网络侧排查(已排除网络/链接因素)
服务端 302/200/content-length/accept-ranges 全部正常,问题在下载器自身解析逻辑。用 Qt6 复刻
UrlThread::begin()(manager->head())实测:Qt 能正常跟随 302 并在 finished 回调中拿到 200 +content-length: 5317964+content-disposition—— Qt 环节本身也是好的,断点出在拿到头信息后调用的 curl 子进程。1.3 对照实验:Gitee 同类链接正常
用 Gitee 上同一类"Release 资产直链"做对照(可正常识别大小并勾选下载):
attname=rustdesk-...deb—— 无%20(文件名放在attname=参数且不含空格)response-content-disposition=attachment%3B%20filename%3D...—— 含%20toString()回读后exit 3拒绝application/vnd.debian.binary-package(content-type.conf 有映射)application/octet-stream(无映射,type 落 "html")Gitee 的跳转链中根本不存在
%20,即使下载器存在空格转义 bug 也不会被触发;GitHub 把attachment; filename=(含空格)整体编码为response-content-disposition参数,%20必然出现。同一个 bug,Gitee 的链接格式绕过了它,GitHub 的链接格式必然踩中——这也解释了为什么失败与 .deb/.zip/.sh 文件类型无关。另外注意:即使修复空格问题,GitHub 的application/octet-stream仍会因 content-type.conf 无映射而使 type 判定为 "html"(见 1.4 后续解析与第 3 节兜底建议)。1.4 源码定位与实证复现
(
src/src/ui/createTask/urlthread.cpp,6.0.26 与 master 一致)① Qt 拿到的重定向 URL 含真实空格
GitHub 302 的 Location 中,文件名字段是合法编码的:
Qt 的 QNetworkAccessManager 自动跟随 302,
reply->url().toString()回读时会把%20解码成真实空格(Qt6 测试程序实测输出):② 空格转义被
if(list.size() > 2)永久短路case 200分支把该 URL 交给 curl 获取真实头信息,并"贴心地"处理了空格——但条件写错了:list只有"-I"和 URL 两个元素,if(list.size() > 2)永远为假;即使条件成立,replace 也只把空格改回%20,属于"先解码再转义"的无谓往返。QProcess 不经 shell,curl 收到含真实空格的单个参数:实测确认(python subprocess 直传参数复刻 QProcess 行为):exit 3、stdout 零字节。
readyReadStandardOutput永不触发 →getUrlSize()/getUrlType()/文件名解析全部没有输入。③ 失败后的表现
sendFinishedUrl不再发出,任务行停留在初始占位状态(size=""、length=0),界面上 Size 列为空白;注意 case 200 分支里那个把空大小强制置 "0KB" 的兜底(urlthread.cpp第 108 行附近)在此路径下根本走不到——所以实测看到的是空白而不是 "0KB";TaskDelegate::paint()中当size.isEmpty()时,行图标与文字按半透明/暗色绘制(setOpacity(0.4)、QColor(192,198,212,70)),即截图中看到的灰化不可用样式;getUrlToName()直接从 URL 路径取末段(含.deb后缀),不依赖解析线程的结果。④ size 为空/length=0 直接导致无法勾选、确定按钮置灰
createtaskwidget.cpp中所有勾选回调(onAllCheck、onVideoCheck、onZipCheck……)与updateSelectedInfo()对行置选中的统一前提是:该行 length=0 → 永远不被置选中 →
cnt恒为 0 →m_sureButton->setEnabled(cnt > 0 ? true : false)「确定」按钮永远置灰。length=0 的行还被各类统计(video/zip/doc…)按类型过滤后完全忽略,单行手动勾选同样不计入。1.5 影响范围
attachment%3B%20filename%3D(已实测 .deb 与 .sh 的 302 输出一致),全部无法获取大小与下载;%20"的站点(部分 CDN/网盘直链)都会以同样方式失败;2. 复现步骤
3. 结论与建议
case 200分支把 Qt 解码后含真实空格的重定向 URL 未加转义直接传给 curl,if(list.size() > 2)的错误条件使空格转义永远不生效,curl 以 exit 3 拒绝该 URL,后续大小/类型/选中统计全部连锁失效;if(list.size() > 2)(或直接删除该 if)——对 URL 参数调用QUrl::toPercentEncoding/QUrl::toString(QUrl::FullyEncoded)后再传 curl,杜绝"解码后再裸传";reply->rawHeaderPairs()已含全部所需头信息(content-length/content-type/content-disposition 实测齐全),直接在 Qt 侧解析即可,少一次进程调用也少一个失败点;content-type.conf增加application/octet-stream的处理(回退到 Content-Disposition 文件名后缀或原 URL 后缀,而不是 "html");文件名解析兼容attachment; filename=...(filename前带空格)与filename*=UTF-8''...;curl 失败(非零退出)时重试一次或改用 GET +Range: bytes=0-0(206 +Content-Range),不要静默落回 "0KB";