From b300e449a1b48b169b99d4f132a9884589c80129 Mon Sep 17 00:00:00 2001 From: Looly Date: Thu, 24 Aug 2023 08:56:46 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D302=E9=87=8D=E5=AE=9A?= =?UTF-8?q?=E5=90=91=E6=97=B6=EF=BC=8CLocation=E4=B8=AD=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E5=8F=B7=E8=A2=AB=E8=BD=AC=E4=B9=89=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../http/client/engine/jdk/JdkClientEngine.java | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/jdk/JdkClientEngine.java b/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/jdk/JdkClientEngine.java index 4ecdfe2b6..cec31d24d 100644 --- a/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/jdk/JdkClientEngine.java +++ b/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/jdk/JdkClientEngine.java @@ -16,6 +16,7 @@ import org.dromara.hutool.core.io.IORuntimeException; import org.dromara.hutool.core.io.IoUtil; import org.dromara.hutool.core.net.url.UrlBuilder; import org.dromara.hutool.core.text.StrUtil; +import org.dromara.hutool.core.text.split.SplitUtil; import org.dromara.hutool.core.util.ObjUtil; import org.dromara.hutool.http.HttpException; import org.dromara.hutool.http.HttpUtil; @@ -31,6 +32,7 @@ import org.dromara.hutool.http.meta.Method; import java.io.IOException; import java.net.HttpURLConnection; +import java.util.List; /** * 基于JDK的UrlConnection的Http客户端引擎实现 @@ -208,8 +210,20 @@ public class JdkClientEngine implements ClientEngine { if (!location.startsWith("/")) { location = StrUtil.addSuffixIfNot(parentUrl.getPathStr(), "/") + location; } + + // issue#3265, 相对路径中可能存在参数,单独处理参数 + final String query; + final List split = SplitUtil.split(location, "?", 2, true, true); + if (split.size() == 2) { + // 存在参数 + location = split.get(0); + query = split.get(1); + } else { + query = null; + } + redirectUrl = UrlBuilder.of(parentUrl.getScheme(), parentUrl.getHost(), parentUrl.getPort(), - location, null, null, parentUrl.getCharset()); + location, query, null, parentUrl.getCharset()); } else { redirectUrl = UrlBuilder.ofHttpWithoutEncode(location); }