我需要编写一个实用程序方法,它会获取一个url并检查给定的URL是否有效?
网址可以是带有/不带协议的任何内容,例如http,https或者可以包含相对网址,例如,如果域名是example
,网址是" abc.com"那么它是一个相对的URL。还它也可以是无效的网址,并且可以包含简单的字符串。
此外,我还列出了列入白名单的网址,可以更改youtube.com
,facebook.com
等运行时。
如何在我的情况下检查给定的网址是否有效,我正在做的一些基本检查如下: -
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.
}
}
现在我的问题是如何从http
或https
之后的网址中正确提取域名。
注意: - 我正在使用apache StringUtils,很可能url可能像https://absdsbsb
或https://anmds.txt
。如果它是正则表达式匹配的好例子,还让我知道吗?
答案 0 :(得分:5)
执行此操作的正确方法是使用URI
类。
您可以将它们视为字符串并查找特定的模式或子字符串,但有各种各样的"棘手的"写入可用于传递不应该访问的URL的URL的方法。 (但是,如果你使用的是白名单而不是黑名单,那就太难了了。)
无论如何,该方法应该是使用URI
类来解析URL字符串,然后获取并匹配protocol
和host
组件。
一旦你拥有了这个域名,你就有效将它与白名单进行匹配有点夸张,但我会考虑使用TreeSet,并考虑使用它用于加速域前缀匹配的floor
和ceiling
方法。
(如果正则表达式匹配会给你带来良好的表现,我会感到惊讶。)