你能分享一个URL解析实现的链接吗?
据我所知,URL包含以下字段:
- 协议(http,https,ftp等)
- 用户名
- 用户密码
- 主机地址(IP地址或DNS FQDN)
- 端口(可以暗示)
- 服务器文档根目录内的文档路径
- 一组参数和值
- 文件部分(#)
如
协议://用户:密码@主机:端口/路径/文件ARG1 = VAL1&ARG2 = val2的#部
我需要一个代码来从任何给定的URL字符串中获取任何这些字段的值(如果没有设置,则为null /空值)。 我自己实现这个还是已经有了代码,所以我不需要发明一个轮子?
我对Scala或Java代码特别感兴趣。 C#,PHP,Python或Perl代码也很有用。
URL类为您提供所需的一切。 请参阅http://download.oracle.com/javase/6/docs/api/java/net/URL.html
URL url = new URL("protocol://user:password@host:port/path/document?arg1=val1&arg2=val2#part"); url.getProtocol(); url.getUserInfo(); url.getAuthority(); url.getHost(); url.getPort(); url.getPath(); // document part is contained within the path field url.getQuery(); url.getRef(); // gets #part
为此使用java.net.URI类。 URL用于实际资源和真实协议。 URI用于可能不存在的协议和资源。
在Java中,只需使用URL
类 。 它提供了诸如getProtocol
, getHost
等方法来获取URL的不同部分。
PHP: http : //au.php.net/manual/en/function.parse-url.php
默认情况下,URL不支持ldap。 可以扩展URL并添加协议,但我最终得到了一个简单的解析器和一个小的新类。
基于@Codemwnci答案,这是一个完整的例子,用于从带或不带参数的url
获取filename
:
URL videoUrl = new URL("https://somesite.com/path/v/t43.1792-2/1186696120_n.mp4?efg=something"); String videoFileName = videoUrl.getPath().substring(videoUrl.getPath().lastIndexOf("/") + 1);
1186696120_n.mp4