我有一个程序可以从网页中删除链接,然后测试链接是否正常工作或损坏。我遇到的一点问题是确保 URL 确实有效。
有问题的链接只是为了确保从最终用户的角度来看网站正常工作。所以主要是 http、https 和 mailto 协议,我实际上不确定我们是否使用了任何其他协议,比如 ftp,但我希望能够处理所有意外情况。
到目前为止,这是我构建 URI 的代码。在此之前,我已经从其他页面抓取了链接:
private boolean isValidURI(String checkUrl){
boolean validURI = false;
checkUrl = "this could be a link for some reason.com"; //set to link you want to test
//Decodes checkUrl - Some links may already be encoded. This sets everything to a default of non-encoded urls.
try {
checkUrl = URLDecoder.decode(checkUrl, "UTF-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
System.out.println("Error 1: "+checkUrl);
}
//Encodes checkUrl, allows URLs with various characters.
try {
url = new URL(checkUrl);
} catch (MalformedURLException e2) {
e2.printStackTrace();
System.out.println("Error 2: "+checkUrl);
}
try {
uri = new URI(url.getProtocol(), url.getAuthority(), url.getPath(), url.getQuery(), url.getRef());
System.out.println(uri);
validURI = true;
} catch (URISyntaxException e3) {
e3.printStackTrace();
System.out.println("Error 3: "+checkUrl);
}
return validURI;
}
我在这里苦苦挣扎的是,如果我在没有有效协议的情况下放入链接,例如“这是link.com”,我会得到
at java.net.URL.<init>(Unknown Source)
at java.net.URL.<init>(Unknown Source)
at java.net.URL.<init>(Unknown Source)
at xboxtools.PingUrl.isValidURI(PingUrl.java:106)
at xboxtools.PingUrl.setLinkStatus(PingUrl.java:47)
at xboxtools.PingUrl.<init>(PingUrl.java:28)
at xboxtools.LocaleTab.runLocaleActionPerformed(LocaleTab.java:179)
at xboxtools.LocaleTab$1$1.run(LocaleTab.java:71)
at java.lang.Thread.run(Unknown Source)
Exception in thread "Thread-2" java.lang.NullPointerException
at xboxtools.PingUrl.isValidURI(PingUrl.java:113)
at xboxtools.PingUrl.setLinkStatus(PingUrl.java:47)
at xboxtools.PingUrl.<init>(PingUrl.java:28)
at xboxtools.LocaleTab.runLocaleActionPerformed(LocaleTab.java:179)
at xboxtools.LocaleTab$1$1.run(LocaleTab.java:71)
at java.lang.Thread.run(Unknown Source)
基本上我想做的是测试我抓取的链接是否是有效链接。如果不是,请将 validURI 设置为 false,然后继续下一个链接。
关于我可以做些什么来改进这一点的建议有什么帮助吗?