gpt4 book ai didi

java - 请求 URL 中的括号合法但在 URI 中不合法(Java)?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:18:35 25 4
gpt4 key购买 nike

显然 URI 路径中不允许使用方括号。

我不确定这是否是 Tomcat 问题,但我收到了包含 ] 路径的请求。

换句话说

request.getRequestURL() == "http://localhost:8080/a]b"
request.getRequestURI() == "/a]b"

BTW getRequestURL() 和 URI 通常被转义为 http://localhost:8080/ab

request.getRequestURL() == "http://localhost:8080/a%20b"

所以如果你尝试这样做:

new URI("http://localhost:8080/a]b")
new URI(request.getRequestURL())

它将因 URI 解析异常而失败。如果我转义将使 %20 双重转义的路径。

如何将 Servlet 请求 URL 转换为 URI?

最佳答案

Java 的 URI 似乎非常严格,需要对 Excluded US-ASCII Charset 进行转义.

为了解决这个问题,我只对那些减去 '%''#' 的字符进行编码,因为 URL 可能已经包含这些字符。我使用了 Http 客户端 URI 实用程序,由于某种原因它不在 HttpComponents 中。

private static BitSet badUriChars = new BitSet(256);
static {
badUriChars.set(0, 255, true);
badUriChars.andNot(org.apache.commons.httpclient.URI.unwise);
badUriChars.andNot(org.apache.commons.httpclient.URI.space);
badUriChars.andNot(org.apache.commons.httpclient.URI.control);
badUriChars.set('<', false);
badUriChars.set('>', false);
badUriChars.set('"', false);
}

public static URI toURIorFail(String url) throws URISyntaxException {
URI uri = URIUtil.encode(url, badUriChars, "UTF-8");
return new URI(uri);
}

编辑:这里有一些相关的 SO 帖子(更多内容即将发布):

关于java - 请求 URL 中的括号合法但在 URI 中不合法(Java)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11038967/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com