经典代码:
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.奇怪。