2

私はウェブページからリンクを削り取り、リンクが機能しているか壊れているかをテストするプログラムを持っています。私が少し問題を抱えているのは、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に設定してから、次のリンクに進みます。

これを改善するために私ができることの提案に何か助けはありますか?

4

1 に答える 1

3

例外 (MalformedURLException) をキャッチし、何も起こらなかったかのようにさらにコードを続行するため、NPEが発生します。

あなたの質問はURLの検証とは何の関係もありません。単純なデバッグだけです。理解できない状況に遭遇した場合は、まず適切なデバッガーを使用してコードをステップ実行してみてください。

于 2013-02-19T17:23:11.750 に答える