From 5a677be8523373ec9b1a3d3688be19cd5d2e7785 Mon Sep 17 00:00:00 2001 From: Looly Date: Sun, 10 Mar 2024 17:29:54 +0800 Subject: [PATCH] fix code --- .../org/dromara/hutool/http/HttpUtil.java | 27 +++++++++++++++++++ .../hutool/http/client/HeaderOperation.java | 13 ++------- .../client/engine/jdk/JdkHttpConnection.java | 12 ++------- .../client/engine/jdk/JdkHttpResponse.java | 13 +-------- 4 files changed, 32 insertions(+), 33 deletions(-) diff --git a/hutool-http/src/main/java/org/dromara/hutool/http/HttpUtil.java b/hutool-http/src/main/java/org/dromara/hutool/http/HttpUtil.java index 21e191d1d..251f7c6c5 100644 --- a/hutool-http/src/main/java/org/dromara/hutool/http/HttpUtil.java +++ b/hutool-http/src/main/java/org/dromara/hutool/http/HttpUtil.java @@ -12,6 +12,9 @@ package org.dromara.hutool.http; +import org.dromara.hutool.core.collection.CollUtil; +import org.dromara.hutool.core.map.CaseInsensitiveMap; +import org.dromara.hutool.core.map.MapUtil; import org.dromara.hutool.core.net.url.UrlQueryUtil; import org.dromara.hutool.core.text.StrUtil; import org.dromara.hutool.http.client.ClientConfig; @@ -23,6 +26,7 @@ import org.dromara.hutool.http.meta.Method; import org.dromara.hutool.http.server.SimpleServer; import java.nio.charset.Charset; +import java.util.Collection; import java.util.List; import java.util.Map; @@ -269,6 +273,7 @@ public class HttpUtil { /** * 打印{@link Response} 为可读形式 + * * @param response {@link Response} * @return 字符串 */ @@ -285,4 +290,26 @@ public class HttpUtil { return sb.toString(); } + + /** + * 获取指定的Header值,如果不存在返回{@code null}
+ * 根据RFC2616规范,header的name不区分大小写,因此首先get值,不存在则遍历匹配不区分大小写的key。 + * + * @param headers 头信息的Map + * @param name header名 + * @return header值 + * @since 6.0.0 + */ + public static String header(final Map> headers, final String name) { + Collection values = headers.get(name); + if (null == values && !(headers instanceof CaseInsensitiveMap)) { + // issue#I96U4T,根据RFC2616规范,header的name不区分大小写 + values = MapUtil.firstMatchValue(headers, entry -> StrUtil.equalsIgnoreCase(name, entry.getKey())); + } + if (CollUtil.isNotEmpty(values)) { + return CollUtil.getFirst(values); + } + + return null; + } } diff --git a/hutool-http/src/main/java/org/dromara/hutool/http/client/HeaderOperation.java b/hutool-http/src/main/java/org/dromara/hutool/http/client/HeaderOperation.java index 93be10036..67d9ee5f1 100644 --- a/hutool-http/src/main/java/org/dromara/hutool/http/client/HeaderOperation.java +++ b/hutool-http/src/main/java/org/dromara/hutool/http/client/HeaderOperation.java @@ -17,6 +17,7 @@ import org.dromara.hutool.core.collection.CollUtil; import org.dromara.hutool.core.collection.ListUtil; import org.dromara.hutool.core.map.MapUtil; import org.dromara.hutool.core.text.StrUtil; +import org.dromara.hutool.http.HttpUtil; import org.dromara.hutool.http.meta.HeaderName; import java.net.HttpCookie; @@ -71,17 +72,7 @@ public interface HeaderOperation> { * @return header值 */ default String header(final String name) { - final Map> headers = headers(); - Collection values = headers.get(name); - if(null == values){ - // issue#I96U4T,根据RFC2616规范,header的name不区分大小写 - values = MapUtil.firstMatchValue(headers, entry-> StrUtil.equalsIgnoreCase(name, entry.getKey())); - } - if (ArrayUtil.isNotEmpty(values)) { - return CollUtil.getFirst(values); - } - - return null; + return HttpUtil.header(headers(), name); } /** diff --git a/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/jdk/JdkHttpConnection.java b/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/jdk/JdkHttpConnection.java index 5f85440d6..6d8f05f5b 100644 --- a/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/jdk/JdkHttpConnection.java +++ b/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/jdk/JdkHttpConnection.java @@ -12,9 +12,7 @@ package org.dromara.hutool.http.client.engine.jdk; -import org.dromara.hutool.core.collection.CollUtil; import org.dromara.hutool.core.lang.Opt; -import org.dromara.hutool.core.map.MapUtil; import org.dromara.hutool.core.net.url.UrlUtil; import org.dromara.hutool.core.reflect.FieldUtil; import org.dromara.hutool.core.text.StrUtil; @@ -32,7 +30,6 @@ import java.net.HttpURLConnection; import java.net.ProtocolException; import java.net.Proxy; import java.net.URL; -import java.util.Collection; import java.util.List; import java.util.Map; @@ -295,13 +292,8 @@ public class JdkHttpConnection implements HeaderOperation, Cl */ @Override public String header(final String name) { - String headerField = this.conn.getHeaderField(name); - if (null == headerField) { - final Map> headers = headers(); - headerField = CollUtil.getFirst(MapUtil.firstMatchValue(headers, entry -> StrUtil.equalsIgnoreCase(name, entry.getKey()))); - } - - return headerField; + // getHeaderField已经实现忽略大小写 + return this.conn.getHeaderField(name); } /** diff --git a/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/jdk/JdkHttpResponse.java b/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/jdk/JdkHttpResponse.java index 291654256..d229a60d8 100644 --- a/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/jdk/JdkHttpResponse.java +++ b/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/jdk/JdkHttpResponse.java @@ -12,11 +12,8 @@ package org.dromara.hutool.http.client.engine.jdk; -import org.dromara.hutool.core.array.ArrayUtil; import org.dromara.hutool.core.io.IoUtil; import org.dromara.hutool.core.io.stream.EmptyInputStream; -import org.dromara.hutool.core.map.MapUtil; -import org.dromara.hutool.core.text.StrUtil; import org.dromara.hutool.core.util.ObjUtil; import org.dromara.hutool.http.HttpException; import org.dromara.hutool.http.HttpUtil; @@ -96,15 +93,7 @@ public class JdkHttpResponse implements Response, Closeable { @Override public String header(final String name) { - List headerValues = this.headers.get(name); - if(null == headerValues){ - // issue#I96U4T,根据RFC2616规范,header的name不区分大小写 - headerValues = MapUtil.firstMatchValue(this.headers, entry-> StrUtil.equalsIgnoreCase(name, entry.getKey())); - } - if (ArrayUtil.isNotEmpty(headerValues)) { - return headerValues.get(0); - } - return null; + return HttpUtil.header(this.headers, name); } /**