我需要编写一个实用程序方法,该方法将获取一个 url 并检查给定的 url 是否有效?
URL可以是任何有/没有协议的东西,如http,https或可以包含相对URL,例如如果域example
并且url是"abc.com",那么它是一个相对URL。 它也可以是无效的URL,并且可以包含简单的字符串。
此外,我有列入白名单的URL列表,可以更改运行时,如youtube.com
,facebook.com
等。
如何检查给定的 url 在我的情况下是否有效,我正在做的一些基本检查如下:-
String url = "http://youtube.com";
if(!StringUtil.isEmpty(url))
{
if (url.startsWith("http:") || pathToImage.startsWith("https://")) {
// check if url is from whitlist domains
} else {
// do nothing, url is not internal domain.
}
}
现在我的问题是我如何从 URL 中正确提取域名,该 URL 将在http
或https
之后。
注意:- 我正在使用apache StringUtils,网址很可能像https://absdsbsb
或https://anmds.txt
。也让我知道这是否是正则表达式匹配的好案例?
执行此操作的正确方法是使用 URI
类。
您可以将它们视为字符串并查找特定的模式或子字符串,但是有各种"棘手"的方法来编写可用于传递不应该传递的 URL。 (但是,如果您使用的是白名单而不是黑名单,那么就更难变得棘手了。
无论如何,方法应该是使用 URI
类来解析 URL 字符串,然后获取并匹配protocol
和host
组件。
一旦你有了域名,如何有效地将其与白名单进行匹配有点麻烦,但我会考虑使用 TreeSet,并考虑使用它floor
和ceiling
方法来加速域前缀匹配。
(如果正则表达式匹配能给你带来良好的性能,我会感到惊讶。