You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何获取服务器响应状态码?附现有代码求指导

解决Java发送请求时获取响应状态码的问题

你的核心问题在于使用的URLConnection是通用连接类,没有提供获取HTTP响应状态码的方法。要获取状态码,需要将其强制转换为**HttpURLConnection**——这是Java专门用于HTTP协议的连接实现,包含了HTTP相关的所有方法(比如获取响应码、请求方法设置等)。

修改步骤及代码说明

  1. 替换连接类型:将URLConnection替换为HttpURLConnection,并进行强制类型转换
  2. 明确请求方法:因为你是发送POST数据,需要显式设置setRequestMethod("POST")
  3. 获取响应状态码:在写入请求体之后、读取响应之前调用getResponseCode()
  4. 处理错误状态:当响应码≥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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 12:02:15