diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/map/MapUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/map/MapUtil.java index d1269a761..48e87c9b6 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/map/MapUtil.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/map/MapUtil.java @@ -1374,4 +1374,43 @@ public class MapUtil extends MapGetUtil { } return list; } + + /** + * 遍历Map,返回第一个匹配的value值 + * + * @param map map + * @param predicate 匹配条件 + * @param 键类型 + * @param 值类型 + * @return value值 + * @since 6.0.0 + */ + public static V firstMatchValue(final Map map, final Predicate> predicate) { + final Entry kvEntry = firstMatch(map, predicate); + if (null != kvEntry) { + return kvEntry.getValue(); + } + return null; + } + + /** + * 遍历Map,返回第一个匹配的entry值 + * + * @param map map + * @param predicate 匹配条件 + * @param 键类型 + * @param 值类型 + * @return entry + * @since 6.0.0 + */ + public static Entry firstMatch(final Map map, final Predicate> predicate) { + if (isNotEmpty(map)) { + for (final Entry entry : map.entrySet()) { + if (predicate.test(entry)) { + return entry; + } + } + } + return null; + } } 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 79450b72d..291654256 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 @@ -15,6 +15,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; @@ -94,7 +96,11 @@ public class JdkHttpResponse implements Response, Closeable { @Override public String header(final String name) { - final List headerValues = this.headers.get(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); }