温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java怎么解析HTTP报文

发布时间:2026-09-10 22:23:58 来源:亿速云 阅读:98 作者:小樊 栏目:编程语言

在 Java 中“解析 HTTP 报文”通常有几种层次,取决于你是自己处理原始字节/字符串,还是使用现成库。下面按常见场景给你讲清楚。


一、最原始方式:手动解析 HTTP 报文(了解原理)

HTTP 报文基本结构:

请求报文

GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: curl/7.0
Accept: */*

body(可选)

响应报文

HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 11

Hello World

示例:解析字符串形式的 HTTP 请求

public class HttpParser {
    public static void main(String[] args) {
        String request = """
            GET /index.html HTTP/1.1
            Host: www.example.com
            User-Agent: Java
            
            """;

        String[] lines = request.split("\r\n");

        // 请求行
        String[] requestLine = lines[0].split(" ");
        String method = requestLine[0];
        String path = requestLine[1];
        String version = requestLine[2];

        // 请求头
        for (int i = 1; i < lines.length; i++) {
            if (lines[i].isEmpty()) break;
            String[] header = lines[i].split(": ");
            System.out.println(header[0] + " => " + header[1]);
        }
    }
}

⚠️ 实际生产中不要自己写完整 HTTP 解析器,容易出错。


二、使用 Java 标准库(java.net)

1️⃣ 解析 HTTP 响应(客户端)

HttpURLConnection conn =
    (HttpURLConnection) new URL("http://example.com").openConnection();

int code = conn.getResponseCode();
String contentType = conn.getContentType();

BufferedReader reader =
    new BufferedReader(new InputStreamReader(conn.getInputStream()));

String line;
while ((line = reader.readLine()) != null) {
    System.out.println(line);
}

✅ Java 已经帮你解析:

  • 状态行
  • 响应头
  • 响应体

三、使用 HttpClient(Java 11+,推荐)

HttpClient client = HttpClient.newHttpClient();

HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("http://example.com"))
    .build();

HttpResponse<String> response =
    client.send(request, HttpResponse.BodyHandlers.ofString());

System.out.println(response.statusCode());
System.out.println(response.headers().map());
System.out.println(response.body());

✅ 自动解析 HTTP 报文
✅ 支持 HTTP/2
✅ 现代写法


四、服务端解析 HTTP(Socket 级)

如果你是写 Web 服务器 / Netty / 网关,需要解析客户端发来的 HTTP:

简单 Socket 示例

ServerSocket server = new ServerSocket(8080);
Socket socket = server.accept();

BufferedReader in =
    new BufferedReader(new InputStreamReader(socket.getInputStream()));

String line;
while (!(line = in.readLine()).isEmpty()) {
    System.out.println(line);
}

⚠️ 仅适合学习,不建议生产使用


五、使用成熟框架(生产推荐)

✅ 服务端

  • Spring MVC / Spring Boot
  • Netty + HttpServerCodec
  • Undertow
  • Jetty

✅ 客户端

  • Apache HttpClient
  • OkHttp
  • Java HttpClient

六、如果你是想“解析 HTTP 报文内容”

需求 推荐方式
解析 URL 参数 URI, HttpServletRequest
解析 JSON Body Jackson / Gson
解析 Form 表单 Spring @RequestParam
解析 Header getHeader()

七、总结一句话

学习原理 → 手动解析
写业务 → 用框架
写服务器 → Netty / Spring

如果你能告诉我:

  • 是 客户端还是服务端
  • 是 HTTP / HTTPS
  • 是否需要 解析 body(JSON / form)

我可以给你更精确的代码示例。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手