如何执行MalformedURLException /找不到404

时间:2019-03-24 12:49:42

标签: java http exception get malformedurlexception

如何使我的程序返回MalformedUrlException而不只是通用异常?

我正在做一个简单的函数,该函数读取用户在控制台中输入的URL,并从URL返回内容。我需要它来检查URL是否是有效URL或不是有效URL。

示例网址: http://google.com/not-found.html http:/google.com

我创建了两个catch异常,但似乎总是返回整体异常,而不是MalformedUrlException。

    public static String getUrlContents(String theUrl) {
    String content = "";
    try {
        URL url = new URL(theUrl);
        //Create a url connection object 
        URLConnection urlConnection = url.openConnection();
        //wrap the url connection a buffered reader 
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
        String line;
        while((line = bufferedReader.readLine()) != null) {
            content += line + "\n";
        }
        bufferedReader.close();
    } catch (MalformedURLException e) {
        System.out.println("The following url is invalid'" + theUrl + "'");
        //logging error should go here
    } catch (Exception e) {
        System.out.println("Something went wrong, try agian");
    }
    return content;
}

1 个答案:

答案 0 :(得分:0)

首先,“找不到”资源不是java.net.MalformedURLException:

  

公共类MalformedURLException扩展了IOException

     

抛出该错误表示URL格式错误。没有合法的   协议可以在规范字符串中找到,或者该字符串可以   无法解析。

我了解到,您想在URL导致找不到返回代码(404)时遇到这种情况。为此,您需要检查HTTP响应代码。

最简单的方法是使用java.net.HttpURLConnection

https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/net/HttpURLConnection.html

  

公共抽象类HttpURLConnection扩展了URLConnection

     

一个支持HTTP特定功能的URLConnection。见规格   有关详细信息。

     

每个HttpURLConnection实例用于发出单个请求,但是   与HTTP服务器的基础网络连接可能是   由其他实例透明共享。调用close()方法   在HttpURLConnection的InputStream或OutputStream上   请求可能会释放与此实例关联的网络资源,但   对任何共享的持久连接没有影响。呼叫   如果持久化,disconnect()方法可能会关闭基础套接字   否则连接当时是空闲的。

您可以通过调用getResponseCode()来检查响应代码。如果结果小于400,则表示得到有效的响应,否则出现客户端错误(4xx)或服务器错误(5xx)。

类似这样的东西:

public static String getUrlContents(String theUrl) {
    String content = "";
    try {
        URL url = new URL(theUrl);
        //Create a url connection object 
        URLConnection urlConnection = url.openConnection();
        if (urlConnection instanceof HttpURLConnection) {
            HttpURLConnection conn = (HttpURLConnection) urlConnection;
            if (conn.getResponseCode() < 400) {
                // read contents
            } else {
                System.out.println(conn.getResponseMessage());
                // treat the error as you like
            }
        } else {
            // not a HTTP connection, treat as you like
        }
    } catch (MalformedURLException e) {
        System.out.println("The following url is invalid'" + theUrl + "'");
        //logging error should go here
    } catch (Exception e) {
        System.out.println("Something went wrong, try agian");
    }
    return content;
}

我还没有检查代码,但是我认为您可以了解总体思路。