标准 URL 规范化 - Java
Posted
技术标签:
【中文标题】标准 URL 规范化 - Java【英文标题】:Standard URL Normalization - Java 【发布时间】:2011-03-22 20:54:50 【问题描述】:我想问是否有任何Java包或库具有标准的URL规范化?
URL 表示的 5 个组成部分
http://www[dot]example[dot]com:8040/folder/exist?name=sky#head
-
方案:http
授权:www.example.com:8040
路径:/文件夹/存在
查询:?name=sky
片段:#head
标准 URL 规范化的 3 种类型
基于语法的规范化
大小写规范化 - 将方案和权限组件中的所有字母转换为小写 百分比编码规范化 - 解码与未保留字符相对应的任何百分比编码八位字节,例如用于连字符的 %2D 和用于下划线的 %5 路径段规范化 - 从路径组件中删除点段,例如“.”和“..”基于方案的规范化
在 URL 的权限组件后添加尾随“/” 删除默认端口号,例如http方案的80 截断 URL 片段基于协议的规范化
仅当访问资源的结果相等时才适用 例如,example.com/data 被源服务器定向到 example.com/data/【问题讨论】:
【参考方案1】:正如其他人所提到的,java.net.URL 和/或java.net.URI 是一些明显的起点。
这里有一些其他选项:
Galimatias(西班牙语为“胡言乱语”)似乎是一个固执己见且相对流行的 Java URL 规范化库。源代码可以在github.com/smola/galimatias找到。
galimatias 开始对 java.net.URL 和 java.net.URI 感到沮丧。他们两个都很好 用于基本用例,但对其他用例严重损坏
github.com/sentric/url-normalization 库提供了另一种(我认为不寻常的)方法,它反转域部分;例如“com.***”而不是“***.com”。
您可以在 Github 上找到其他变体,有时使用 Python、Ruby 和 php 等语言实现。
【讨论】:
【参考方案2】:URI uri = URI.create("http://www.example.com:8040/folder/exist?name=sky#head");
String scheme = uri.getScheme();
String authority = uri.getAuthority();
// ...
https://docs.oracle.com/javase/1.5.0/docs/api/java/net/URI.html
【讨论】:
【参考方案3】:java.net.URL
set()呢?
【讨论】:
以上是关于标准 URL 规范化 - Java的主要内容,如果未能解决你的问题,请参考以下文章