Java中如何获取服务器响应状态码?附现有代码求指导
解决Java发送请求时获取响应状态码的问题
你的核心问题在于使用的URLConnection是通用连接类,没有提供获取HTTP响应状态码的方法。要获取状态码,需要将其强制转换为**HttpURLConnection**——这是Java专门用于HTTP协议的连接实现,包含了HTTP相关的所有方法(比如获取响应码、请求方法设置等)。
修改步骤及代码说明
- 替换连接类型:将
URLConnection替换为HttpURLConnection,并进行强制类型转换 - 明确请求方法:因为你是发送POST数据,需要显式设置
setRequestMethod("POST") - 获取响应状态码:在写入请求体之后、读取响应之前调用
getResponseCode() - 处理错误状态:当响应码≥400(比如404、500)时,
getInputStream()会抛出异常,此时需要用getErrorStream()读取错误响应
修改后的完整代码:
public static void Connection(int portNumber, String addr, String request) throws UnknownHostException, IOException { URL url = new URL(addr); String postData = request; // html request int response = 0; // 强制转换为HttpURLConnection HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setDoOutput(true); // 显式设置POST请求方法 conn.setRequestMethod("POST"); conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); conn.setRequestProperty("Content-Length", Integer.toString(postData.length())); // 写入请求体 try (DataOutputStream dos = new DataOutputStream(conn.getOutputStream())) { dos.writeBytes(postData); } // 获取响应状态码 response = conn.getResponseCode(); responses = response; // 假设responses是类成员变量 System.out.println("响应状态码:" + response); // 根据响应状态码选择读取输入流或错误流 BufferedReader bf; if (response >= HttpURLConnection.HTTP_OK && response < HttpURLConnection.HTTP_BAD_REQUEST) { bf = new BufferedReader(new InputStreamReader(conn.getInputStream())); } else { bf = new BufferedReader(new InputStreamReader(conn.getErrorStream())); } // 读取响应内容 try (bf) { String line; while ((line = bf.readLine()) != null) { System.out.println(line); } } // 释放连接资源 conn.disconnect(); }
关键细节解释
HttpURLConnection的必要性:只有这个类才提供getResponseCode()方法,能直接返回HTTP状态码(如200表示成功,404表示资源不存在,500表示服务器错误)- 错误流处理:如果不处理错误状态,当服务器返回404/500时,调用
getInputStream()会直接抛出IOException,导致你无法获取任何响应信息 - 关闭连接:使用
disconnect()可以释放连接资源,避免资源泄漏
内容的提问来源于stack exchange,提问作者Rediska4445
相关产品推荐
相关产品推荐

