【问题标题】:How to parse any URL/URI in Java?如何解析 Java 中的任何 URL/URI?
【发布时间】:2020-02-20 16:25:38
【问题描述】:

我正在寻找一种在 Java 中解析 URL/URI 的方法,而不必担心常见 URL 的异常。我所知道的Java集成方式分别使用java.net.URIjava.net.URL

这些类中的每一个都有主要的缺点:

  • java.net.URL 无法处理自定义协议/方案,因此使用 idontcare://bla.com/test 之类的 URL 失败
  • java.net.URI 对自定义协议/方案没有任何问题,但如果查询部分包含“非法字符”(非 URL 编码的特殊字符),则会失败。因此,例如在 https://bla.example.org/css?family=Roboto:300|Roboto:300,400,500,700&lang=de 这样的 URL 中失败

是否有一种通用且不受限制(不会针对上述情况引发错误)的方法来解析 Java 中的 URL?

【问题讨论】:

  • @ y_ug 这个问题是关于相反的方向 - 它是关于构建一个正确编码的 URL,我有一个 String 包含一个 url,并且只想访问它的组件,如主机名和协议/方案.
  • 我明白了。然后那些不想要额外依赖的人(比如 Spring Framework 中的 UriComponents)可以编写自定义协议/方案处理程序和/或实现 URLStreamHandlerFactory 并通过 java.protocol.handler.pkgs 属性启用它们或注册 URL.setURLStreamHandlerFactory.跨度>

标签: java parsing url


【解决方案1】:

我发现 UriComponents 来自 Spring Framework 能够处理两个 URI:

String uri = ...
UriComponents uriComponents = UriComponentsBuilder.fromUriString(uri).build();

您可以查看code 以了解它的作用。

【讨论】:

  • 如果您使用的是非 Spring 应用程序,则库 org.springframework:spring-web 及其依赖项是一大堆代码(目前 5.2.3 约为 3.4MB),仅用于解析 URI。但是链接代码中的正则表达式模式URI_PATTERNfromUriString(String) 方法似乎很有价值。它在 Apache 2 许可下:)
猜你喜欢
  • 2015-05-19
  • 2016-10-27
  • 1970-01-01
  • 2011-07-09
  • 2015-12-11
  • 1970-01-01
  • 2014-06-05
  • 2011-02-09
  • 2016-02-25
相关资源
最近更新 更多