У меня есть программа, которая очищает ссылки от веб-страницы, а затем проверяет, работает ли ссылка или не работает. Один бит, с которым у меня возникли проблемы, - убедиться, что URL-адрес действительно действителен.Проверка правильного URL-адреса, построение URI
Эти ссылки предназначены только для того, чтобы сайт работал правильно с точки зрения конечного пользователя. Так что в основном протоколы 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, а затем перейдите к следующей ссылке.
Любая помощь в предложениях, что я мог бы сделать, чтобы улучшить это?
'isValidURI (PingUrl.java:113)', который является строкой 113 – Abubakkar