【发布时间】:2016-01-11 20:14:38
【问题描述】:
我正在尝试使用 Java 的 URL 或 URI 类解析以问号 ? 开头的相对链接。
HTML 示例:
<a href="?test=xyz">Test XYZ</a>
代码示例(来自 Scala REPL):
import java.net._
scala> new URL(new URL("http://abc.com.br/index.php?hello=world"), "?test=xyz").toExternalForm()
res30: String = http://abc.com.br/?test=xyz
scala> (new URI("http://abc.com.br/index.php?hello=world")).resolve("?test=xyz").toString
res31: java.net.URI = http://abc.com.br/?test=xyz
问题是浏览器(在 Chrome、Firefox 和 Safari 上测试)输出以下 URL:http://abc.com.br/index.php?hello=world。它不会丢弃路径“index.php”。它只是替换了查询字符串部分。
似乎浏览器只是遵循https://stackoverflow.com/a/7872230/40876 中解释的电子规范。
Jsoup 库在我们使用 element.absUrl("href") 时会犯同样的“错误”,因为它还依赖于 java 的 URL 解析。
那么 java 的 URL/URI 解析相对路径是怎么回事?它是错误的/不完整的吗?
如何使其行为与浏览器实现相同?
【问题讨论】:
-
我对@987654325@给出了详细的答复(但不会对其结论性发表评论)。
-
这是 Java 的
URI类中的一个错误。URL类具有相同的错误 - 尽管它的实现不同。这两个问题都存在错误报告。对于URL类,由于遗留问题,该错误已关闭为“无法修复” - 根据 Oracle 的说法,URL是遗留问题,不应使用。URI的错误报告仍在此处打开:bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8218962
标签: java url jsoup uri relative-path