This commit is contained in:
Looly 2024-06-25 14:18:40 +08:00
parent 75933bf214
commit 191e757dc9
4 changed files with 35 additions and 8 deletions

View File

@ -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<String> {
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<String> {
try {
return toURL().toURI();
} catch (final URISyntaxException e) {
return null;
throw new HutoolException(e);
}
}

View File

@ -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)));

View File

@ -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]));

View File

@ -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<String, Object> 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());
}
}