HMCL-dev / HMCL-dev/HMCL

[Bug] 安装整合包时若选用BMCLAPI且刚好遇到返回错误代码的对应文件的节点会导致整合包安装直接失败

Open
#4,010 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug
Dominant language
Java
Stars
10.1k
Forks
934
Avg merge
1d 5h
Merged PRs (30d)
82

Description

问题描述 | Bug Description

安装整合包时,若选用BMCLAPI,而且刚好遇到分配的节点没有对应文件,或者返回错误代码(403、500等),会导致安装直接失败。
虽然理论上讲应该是对应节点的问题,但HMCL遇到这种情况,是直接取消安装(安装整合包半天结果突然就取消了...啥都没装上,还是挺抓狂的)

启动器崩溃报告 / 启动器日志文件 | Launcher Crash Report / Launcher Log File
[@.task.AsyncTaskExecutor.lambda$executeNormalTask$31/TRACE] Task failed: org.jackhuang.hmcl.task.Task$StagesHintTask
java.io.IOException: Server returned HTTP response code: 403 for URL: https://ykj-eos-dg5-01.eos-dongguan-6.cmecloud.cn/25baf12fca4444458ea73a247308d7aa086?response-content-disposition=attachment%3B%20filename%2A%3DUTF-8%27%27b7a1bb3a5c5d396d06bcf04a92badfd6e9590421&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20250616T034856Z&X-Amz-SignedHeaders=host&X-Amz-Expires=900&X-Amz-Credential=9T1UKBIX6OJSR5XN2F2T%2F20250616%2Fdefault%2Fs3%2Faws4_request&t=2&u=1039874855820660619&ot=personal&oi=1039874855820660619&f=FiVQQzMFB8Nw2UZ3BAfhJDJ-hxkiWQebc&X-Amz-Signature=bb048efb30f95f0cad530009d8fb722aebda7cd7268294e84e231733352434e1
	at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62)
	at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502)
	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:486)
	at java.base/sun.net.www.protocol.http.HttpURLConnection$10.run(HttpURLConnection.java:2070)
	at java.base/sun.net.www.protocol.http.HttpURLConnection$10.run(HttpURLConnection.java:2065)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:571)
	at java.base/sun.net.www.protocol.http.HttpURLConnection.getChainedException(HttpURLConnection.java:2064)
	at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1634)
	at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1614)
	at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:223)
	at org.jackhuang.hmcl.util.io.HttpRequest$HttpGetRequest.lambda$getString$0(HttpRequest.java:144)
	at org.jackhuang.hmcl.util.io.HttpRequest.getStringWithRetry(HttpRequest.java:228)
	at org.jackhuang.hmcl.util.io.HttpRequest.access$100(HttpRequest.java:46)
	at org.jackhuang.hmcl.util.io.HttpRequest$HttpGetRequest.getString(HttpRequest.java:141)
	at org.jackhuang.hmcl.util.Lang.lambda$wrap$3(Lang.java:301)
	at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1768)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
	at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: java.io.IOException: Server returned HTTP response code: 403 for URL: https://ykj-eos-dg5-01.eos-dongguan-6.cmecloud.cn/25baf12fca4444458ea73a247308d7aa086?response-content-disposition=attachment%3B%20filename%2A%3DUTF-8%27%27b7a1bb3a5c5d396d06bcf04a92badfd6e9590421&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20250616T034856Z&X-Amz-SignedHeaders=host&X-Amz-Expires=900&X-Amz-Credential=9T1UKBIX6OJSR5XN2F2T%2F20250616%2Fdefault%2Fs3%2Faws4_request&t=2&u=1039874855820660619&ot=personal&oi=1039874855820660619&f=FiVQQzMFB8Nw2UZ3BAfhJDJ-hxkiWQebc&X-Amz-Signature=bb048efb30f95f0cad530009d8fb722aebda7cd7268294e84e231733352434e1
	at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:2013)
	at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1614)
	at java.base/java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:531)
	at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:307)
	at org.jackhuang.hmcl.util.io.NetworkUtils.resolveConnection(NetworkUtils.java:155)
	at org.jackhuang.hmcl.util.io.NetworkUtils.resolveConnection(NetworkUtils.java:134)
	at org.jackhuang.hmcl.util.io.HttpRequest$HttpGetRequest.lambda$getString$0(HttpRequest.java:143)
	... 8 more
[12:39:14] [@.task.AsyncTaskExecutor.lambda$executeNormalTask$29/TRACE] Task finished: 安装整合包
[12:39:14] [@.task.AsyncTaskExecutor.lambda$executeNormalTask$29/TRACE] Task finished: org.jackhuang.hmcl.task.Task$StageTask
[12:39:14] [@.task.AsyncTaskExecutor.lambda$executeNormalTask$31/TRACE] Task failed: org.jackhuang.hmcl.mod.curse.CurseInstallTask
java.io.IOException: Server returned HTTP response code: 403 for URL: https://ykj-eos-dg5-01.eos-dongguan-6.cmecloud.cn/25baf12fca4444458ea73a247308d7aa086?response-content-disposition=attachment%3B%20filename%2A%3DUTF-8%27%27b7a1bb3a5c5d396d06bcf04a92badfd6e9590421&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20250616T034856Z&X-Amz-SignedHeaders=host&X-Amz-Expires=900&X-Amz-Credential=9T1UKBIX6OJSR5XN2F2T%2F20250616%2Fdefault%2Fs3%2Faws4_request&t=2&u=1039874855820660619&ot=personal&oi=1039874855820660619&f=FiVQQzMFB8Nw2UZ3BAfhJDJ-hxkiWQebc&X-Amz-Signature=bb048efb30f95f0cad530009d8fb722aebda7cd7268294e84e231733352434e1
	at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62)
	at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502)
	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:486)
	at java.base/sun.net.www.protocol.http.HttpURLConnection$10.run(HttpURLConnection.java:2070)
	at java.base/sun.net.www.protocol.http.HttpURLConnection$10.run(HttpURLConnection.java:2065)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:571)
	at java.base/sun.net.www.protocol.http.HttpURLConnection.getChainedException(HttpURLConnection.java:2064)
	at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1634)
	at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1614)
	at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:223)
	at org.jackhuang.hmcl.util.io.HttpRequest$HttpGetRequest.lambda$getString$0(HttpRequest.java:144)
	at org.jackhuang.hmcl.util.io.HttpRequest.getStringWithRetry(HttpRequest.java:228)
	at org.jackhuang.hmcl.util.io.HttpRequest.access$100(HttpRequest.java:46)
	at org.jackhuang.hmcl.util.io.HttpRequest$HttpGetRequest.getString(HttpRequest.java:141)
	at org.jackhuang.hmcl.util.Lang.lambda$wrap$3(Lang.java:301)
	at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1768)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
	at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: java.io.IOException: Server returned HTTP response code: 403 for URL: https://ykj-eos-dg5-01.eos-dongguan-6.cmecloud.cn/25baf12fca4444458ea73a247308d7aa086?response-content-disposition=attachment%3B%20filename%2A%3DUTF-8%27%27b7a1bb3a5c5d396d06bcf04a92badfd6e9590421&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20250616T034856Z&X-Amz-SignedHeaders=host&X-Amz-Expires=900&X-Amz-Credential=9T1UKBIX6OJSR5XN2F2T%2F20250616%2Fdefault%2Fs3%2Faws4_request&t=2&u=1039874855820660619&ot=personal&oi=1039874855820660619&f=FiVQQzMFB8Nw2UZ3BAfhJDJ-hxkiWQebc&X-Amz-Signature=bb048efb30f95f0cad530009d8fb722aebda7cd7268294e84e231733352434e1
	at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:2013)
	at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1614)
	at java.base/java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:531)
	at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:307)
	at org.jackhuang.hmcl.util.io.NetworkUtils.resolveConnection(NetworkUtils.java:155)
	at org.jackhuang.hmcl.util.io.NetworkUtils.resolveConnection(NetworkUtils.java:134)
	at org.jackhuang.hmcl.util.io.HttpRequest$HttpGetRequest.lambda$getString$0(HttpRequest.java:143)
	... 8 more

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the failing path in org.jackhuang.hmcl.util.io.HttpRequest and NetworkUtils, then trace how CurseInstallTask handles the download error. Reproduce a BMCLAPI response such as HTTP 403 or 500 and verify that installation does not immediately fail when the assigned node lacks the file or returns an error.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
backend, networking
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
42/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.