From 191e757dc912a9c6b26f089c6b73a5b245536375 Mon Sep 17 00:00:00 2001 From: Looly Date: Tue, 25 Jun 2024 14:18:40 +0800 Subject: [PATCH] add test --- .../hutool/core/net/url/UrlBuilder.java | 5 ++-- .../engine/httpclient4/HttpClient4Engine.java | 4 +-- .../engine/httpclient5/HttpClient5Engine.java | 4 +-- .../dromara/hutool/http/IssueIA80XITest.java | 30 +++++++++++++++++++ 4 files changed, 35 insertions(+), 8 deletions(-) create mode 100644 hutool-http/src/test/java/org/dromara/hutool/http/IssueIA80XITest.java diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/net/url/UrlBuilder.java b/hutool-core/src/main/java/org/dromara/hutool/core/net/url/UrlBuilder.java index fabd8da0f..4ecc15b02 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/net/url/UrlBuilder.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/net/url/UrlBuilder.java @@ -12,6 +12,7 @@ package org.dromara.hutool.core.net.url; +import org.dromara.hutool.core.exception.HutoolException; import org.dromara.hutool.core.lang.Assert; import org.dromara.hutool.core.lang.builder.Builder; import org.dromara.hutool.core.text.StrUtil; @@ -565,7 +566,7 @@ public final class UrlBuilder implements Builder { try { return new URL(getSchemeWithDefault(), host, port, fileBuilder.toString(), handler); } catch (final MalformedURLException e) { - return null; + throw new HutoolException(e); } } @@ -578,7 +579,7 @@ public final class UrlBuilder implements Builder { try { return toURL().toURI(); } catch (final URISyntaxException e) { - return null; + throw new HutoolException(e); } } diff --git a/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/httpclient4/HttpClient4Engine.java b/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/httpclient4/HttpClient4Engine.java index 9c551f8f3..6e456b3b8 100644 --- a/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/httpclient4/HttpClient4Engine.java +++ b/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/httpclient4/HttpClient4Engine.java @@ -43,7 +43,6 @@ import org.dromara.hutool.http.ssl.SSLInfo; import java.io.IOException; import java.net.PasswordAuthentication; -import java.net.URI; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -142,11 +141,10 @@ public class HttpClient4Engine implements ClientEngine { private static HttpUriRequest buildRequest(final Request message) { final UrlBuilder url = message.handledUrl(); Assert.notNull(url, "Request URL must be not null!"); - final URI uri = url.toURI(); final RequestBuilder requestBuilder = RequestBuilder .create(message.method().name()) - .setUri(uri); + .setUri(url.toURI()); // 填充自定义头 message.headers().forEach((k, v1) -> v1.forEach((v2) -> requestBuilder.addHeader(k, v2))); diff --git a/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/httpclient5/HttpClient5Engine.java b/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/httpclient5/HttpClient5Engine.java index da14c9b18..e8e65abb7 100644 --- a/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/httpclient5/HttpClient5Engine.java +++ b/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/httpclient5/HttpClient5Engine.java @@ -46,7 +46,6 @@ import org.dromara.hutool.http.ssl.SSLInfo; import java.io.IOException; import java.net.PasswordAuthentication; -import java.net.URI; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -143,9 +142,8 @@ public class HttpClient5Engine implements ClientEngine { private static ClassicHttpRequest buildRequest(final Request message) { final UrlBuilder url = message.handledUrl(); Assert.notNull(url, "Request URL must be not null!"); - final URI uri = url.toURI(); - final ClassicHttpRequest request = new HttpUriRequestBase(message.method().name(), uri); + final ClassicHttpRequest request = new HttpUriRequestBase(message.method().name(), url.toURI()); // 填充自定义头 request.setHeaders(toHeaderList(message.headers()).toArray(new Header[0])); diff --git a/hutool-http/src/test/java/org/dromara/hutool/http/IssueIA80XITest.java b/hutool-http/src/test/java/org/dromara/hutool/http/IssueIA80XITest.java new file mode 100644 index 000000000..cc1580a87 --- /dev/null +++ b/hutool-http/src/test/java/org/dromara/hutool/http/IssueIA80XITest.java @@ -0,0 +1,30 @@ +package org.dromara.hutool.http; + +import org.dromara.hutool.core.date.DateUtil; +import org.dromara.hutool.core.net.url.UrlBuilder; +import org.dromara.hutool.core.util.CharsetUtil; +import org.dromara.hutool.http.client.Request; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.LinkedHashMap; +import java.util.Map; + +public class IssueIA80XITest { + + @Test + void urlWithFormTest() { + final Map param = new LinkedHashMap<>(); + param.put("date", DateUtil.parse("2024-06-25 14:16:47")); + + // 未经过自动编码的 + final Request request = Request.of("http://api.hutool.cn/login?type=aaa").form(param); + final UrlBuilder urlBuilder = request.handledUrl(); + Assertions.assertEquals("http://api.hutool.cn/login?type=aaa&date=2024-06-25 14:16:47", urlBuilder.toString()); + + // 经过自动编码的 + final Request request2 = Request.of("http://api.hutool.cn/login?type=aaa", CharsetUtil.UTF_8).form(param); + final UrlBuilder urlBuilder2 = request2.handledUrl(); + Assertions.assertEquals("http://api.hutool.cn/login?type=aaa&date=2024-06-25%2014:16:47", urlBuilder2.toString()); + } +}