Android HttpUrlConnection为不存在的资源

时间:2016-12-07 00:16:18

标签: android http

经典代码:

    String url = "http://arealdomain.com/realfolder/nonexistent.html";
    BufferedReader reader = null;
    BufferedWriter writer = null;
    HttpURLConnection connection = null;


    try{
        URL urlObject = new URL(url);
        connection = (HttpURLConnection)urlObject.openConnection();
        connection.setRequestMethod("GET");

        StringBuilder sb = new StringBuilder();
        reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));

        String line;
        while((line = reader.readLine()) != null){
            sb.append(line);
        }

    } catch(Exception e){
        e.printStackTrace();

        if (connection != null){
            try {
                int status = connection.getResponseCode();

            } catch (IOException e1) {
                e1.printStackTrace();
            }
        }

        return null;
    }
    finally{
        if (reader != null) {
            try {
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
                return null;
            }
        }

        if (writer != null){
            try {
                writer.close();
            } catch (IOException e) {
                e.printStackTrace();
                return null;
            }
        }

        if (connection != null){
            connection.disconnect();
        }
    }

当我在浏览器中运行该虚假URL时,我得到了预期的404.但是,在catch块中,行int status = connection.getResponseCode();该状态最终为400。

当我访问需要授权的资源而我无法提供时,我确实得到了预期的401。

我真的需要让用户知道他们的请求是否无效(400)与他们是否正在请求不存在或不再存在的内容(404)。

为什么当我对不存在的东西进行HTTP调用时,Android不会给我404而是400;

更新 以上"现象"发生在模拟器上。我正在使用Android Studio,HAXM。当我在使用真实设备的另一台机器上尝试此操作时,我得到了预期的404.奇怪。

0 个答案:

没有答案