Skip to content

[Bug] 从CurseForge中下载模组时不会携带api key #6293

Description

@link-fgfgui

问题描述 | Bug Description

下载一个CurseForge模组,其请求不会附带apikey
使用mitmproxy抓包测试
api请求:

Image

下载请求:

Image Image
gpt5.5 分析 前情提要:我在用codex分析pcl2和hmcl对curseforge新规的实现情况,侧重于是否对已有的包含CurseForge CDN链接的Modrinth格式整合包进行兼容(当然这应该是另一个Issue)

正文:

主要问题

  • 5d1e6fd / PR [Chore] CF 下载文件也使用 API Key #6169 本来把 CF 文件下载的 API key 注入放进了 NetworkUtils.newRequestBuilder(),并让
    FetchTask 改用它。

  • 9e2f1d3 / PR 使用 HttpURLConnection 替换 HttpClient 实现 #6219 把 FetchTask 从 HttpClient 改回 HttpURLConnection 后,下载路径变成 HMCLCore/src/
    main/java/org/jackhuang/hmcl/task/FetchTask.java:331 的 NetworkUtils.createHttpConnection(currentURI),
    不再调用 newRequestBuilder()。

  • 现在 HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/NetworkUtils.java:172 的 newRequestBuilder() 已经
    没有任何调用点,所以 HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/NetworkUtils.java:167 里的
    edge.forgecdn.net -> x-api-key 映射对实际文件下载无效。

影响:通过 FileDownloadTask 下载 CurseForge 文件时,包括下载页、整合包安装、.mrpack 导入,都可能不会带 x-
api-key,之后遇到 CurseForge CDN 强制鉴权会失败。api.curseforge.com 查询本身仍由 HMCLCore/src/main/java/
org/jackhuang/hmcl/addon/repository/CurseForgeRemoteAddonRepository.java:61 的 withApiKey() 覆盖。

次要问题

  • 当前映射只覆盖 edge.forgecdn.net,见 HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/
    NetworkUtils.java:169。如果 CF 返回 media.forgecdn.net / mediafilez.forgecdn.net 这类主机,即使恢复
    newRequestBuilder() 也不会加 key。更稳的是按 host 等于 forgecdn.net 或以 .forgecdn.net 结尾判断。

  • Modrinth 整合包导出仍可能写入 CurseForge 下载 URL:HMCLCore/src/main/java/org/jackhuang/hmcl/modpack/
    modrinth/ModrinthModpackExportTask.java:87、HMCLCore/src/main/java/org/jackhuang/hmcl/modpack/modrinth/
    ModrinthModpackExportTask.java:112。虽然有跳过 CF 远程文件的选项 HMCLCore/src/main/java/org/jackhuang/
    hmcl/modpack/modrinth/ModrinthModpackExportTask.java:203,但默认导出的 downloads 仍可能包含无法携带
    header 的 forgecdn URL。

建议修复方向:把 CF API key 注入迁到 HttpURLConnection 路径实际会经过的位置,覆盖每次请求和重定向后的
currentURI,并把 host 判断扩展到 *.forgecdn.net。同时加一个 FetchTask/FileDownloadTask 级测试,验证初始请
求和 Range 续传请求都会带 x-api-key。

启动器崩溃报告 / 启动器日志文件 | Launcher Crash Report / Launcher Log File

hmcl-exported-logs-2026-07-03T01-15-48.zip

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions