From 4c61c234979a37dbb460db387ba71abf169b8100 Mon Sep 17 00:00:00 2001 From: Looly Date: Wed, 3 Sep 2025 08:57:08 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D`HttpRequest.sendRedirectIfPo?= =?UTF-8?q?ssible`=E6=9C=AA=E5=AF=B9308=E5=81=9A=E5=88=A4=E6=96=AD?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E3=80=82=EF=BC=88issue#4053@Github=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/engine/jdk/JdkClientEngine.java | 5 +---- .../client/engine/okhttp/OkHttpEngine.java | 5 +---- .../cn/hutool/v7/http/meta/HttpStatus.java | 18 ++++++++++++++++++ 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/hutool-http/src/main/java/cn/hutool/v7/http/client/engine/jdk/JdkClientEngine.java b/hutool-http/src/main/java/cn/hutool/v7/http/client/engine/jdk/JdkClientEngine.java index f51298cebc..20a1bb3d16 100644 --- a/hutool-http/src/main/java/cn/hutool/v7/http/client/engine/jdk/JdkClientEngine.java +++ b/hutool-http/src/main/java/cn/hutool/v7/http/client/engine/jdk/JdkClientEngine.java @@ -119,10 +119,7 @@ public class JdkClientEngine extends AbstractClientEngine { } if (HttpStatus.isRedirected(code)) { - // https://www.rfc-editor.org/rfc/rfc7231#section-6.4.7 - // https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Redirections - // 307方法和消息主体都不发生变化。 - if (HttpStatus.HTTP_TEMP_REDIRECT != code) { + if (HttpStatus.isRedirectToGet( code)) { // 重定向默认使用GET message.method(Method.GET); } diff --git a/hutool-http/src/main/java/cn/hutool/v7/http/client/engine/okhttp/OkHttpEngine.java b/hutool-http/src/main/java/cn/hutool/v7/http/client/engine/okhttp/OkHttpEngine.java index 6638b10476..fea4cf4976 100644 --- a/hutool-http/src/main/java/cn/hutool/v7/http/client/engine/okhttp/OkHttpEngine.java +++ b/hutool-http/src/main/java/cn/hutool/v7/http/client/engine/okhttp/OkHttpEngine.java @@ -173,10 +173,7 @@ public class OkHttpEngine extends AbstractClientEngine { if (HttpStatus.isRedirected(code)) { message.locationTo(response.header(HeaderName.LOCATION.getValue())); } - // https://www.rfc-editor.org/rfc/rfc7231#section-6.4.7 - // https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Redirections - // 307方法和消息主体都不发生变化。 - if (HttpStatus.HTTP_TEMP_REDIRECT != code) { + if (HttpStatus.isRedirectToGet( code)) { // 重定向默认使用GET message.method(Method.GET); } diff --git a/hutool-http/src/main/java/cn/hutool/v7/http/meta/HttpStatus.java b/hutool-http/src/main/java/cn/hutool/v7/http/meta/HttpStatus.java index aa5fdb6bf5..1d5ecee76d 100644 --- a/hutool-http/src/main/java/cn/hutool/v7/http/meta/HttpStatus.java +++ b/hutool-http/src/main/java/cn/hutool/v7/http/meta/HttpStatus.java @@ -375,4 +375,22 @@ public interface HttpStatus { return false; } } + + /** + * 是否为重定后请求变更为GET方法,307、308方法消息主体都不发生变化,见:
+ * + * + * @param responseCode 被检查的状态码 + * @return 是否为重定向状态码且需要使用GET方法 + * @since 7.0.0 + */ + static boolean isRedirectToGet(final int responseCode) { + return switch (responseCode) { + case HTTP_TEMP_REDIRECT, HTTP_PERMANENT_REDIRECT -> false; + default -> true; + }; + } }