From 98ebf5f6e285c79f5aaa37e8fe50a0103bec674d Mon Sep 17 00:00:00 2001 From: sukaiyi <1433855681@qq.com> Date: Wed, 4 Dec 2019 18:11:52 +0800 Subject: [PATCH] issue[651]: URLUtil.normalize support ipv6 --- .../main/java/cn/hutool/core/util/URLUtil.java | 16 ++++++++++++---- .../java/cn/hutool/http/test/HttpUtilTest.java | 8 +++++++- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/util/URLUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/URLUtil.java index a73e82b6d..523606879 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/URLUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/URLUtil.java @@ -637,7 +637,7 @@ public class URLUtil { * * * @param url URL字符串 - * @param isEncodeBody 是否对URL中body部分的中文和特殊字符做转义(不包括http:和/) + * @param isEncodeBody 是否对URL中body部分的中文和特殊字符做转义(不包括 http:, /和域名部分) * @return 标准化后的URL字符串 * @since 4.4.1 */ @@ -667,9 +667,17 @@ public class URLUtil { body = body.replaceAll("^[\\\\/]+", StrUtil.EMPTY); // 替换多个\或/为单个/ body = body.replace("\\", "/").replaceAll("//+", "/"); - if (isEncodeBody) { - body = encode(body); + + final int pathSepIndex = StrUtil.indexOf(body, '/'); + String domain = body; + String path = ""; + if (pathSepIndex > 0) { + domain = StrUtil.subPre(body, pathSepIndex); + path = StrUtil.subSuf(body, pathSepIndex); } - return pre + body + StrUtil.nullToEmpty(params); + if (isEncodeBody) { + path = encode(path); + } + return pre + domain + path + StrUtil.nullToEmpty(params); } } \ No newline at end of file diff --git a/hutool-http/src/test/java/cn/hutool/http/test/HttpUtilTest.java b/hutool-http/src/test/java/cn/hutool/http/test/HttpUtilTest.java index be3c98c24..e86e0f313 100644 --- a/hutool-http/src/test/java/cn/hutool/http/test/HttpUtilTest.java +++ b/hutool-http/src/test/java/cn/hutool/http/test/HttpUtilTest.java @@ -71,7 +71,7 @@ public class HttpUtilTest { FileUtil.writeBytes(str, "f:/test/2D.jpg"); Console.log(str); } - + @Test @Ignore public void get12306Test() { @@ -274,4 +274,10 @@ public class HttpUtilTest { String mimeType = HttpUtil.getMimeType("aaa.aaa"); Assert.assertNull(mimeType); } + + @Test + public void ipv6Test() { + String result = HttpUtil.get("http://[fe80::8f8:2022:a603:d180]:9439"); + Console.log(result); + } }