温馨提示×

温馨提示×

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

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

java怎么解析HTTP

发布时间:2026-07-15 23:06:30 来源:亿速云 阅读:95 作者:小樊 栏目:编程语言

在 Java 里“解析 HTTP”通常有几种常见场景,不同场景用的方式不一样。下面按最常见的用法给你系统讲一下,并配上示例。


一、解析 HTTP 请求(服务端)

如果你是服务器,需要解析客户端发来的 HTTP 请求(如 Spring Boot、Servlet)。

1️⃣ 使用 Servlet API(最基础)

@WebServlet("/test")
public class TestServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {

        // 请求行
        String method = req.getMethod();        // GET
        String uri = req.getRequestURI();       // /test
        String query = req.getQueryString();    // a=1&b=2

        // 请求头
        String userAgent = req.getHeader("User-Agent");

        // 请求参数
        String a = req.getParameter("a");

        // 响应
        resp.getWriter().write("ok");
    }
}

✅ 适合:传统 Java Web、Tomcat
✅ 自动帮你解析 HTTP 请求行、Header、参数


2️⃣ Spring Boot(最常见)

@RestController
public class TestController {

    @GetMapping("/test")
    public String test(
            @RequestParam String a,
            HttpServletRequest request) {

        String ua = request.getHeader("User-Agent");
        return "ok";
    }
}

Spring 已经帮你把 HTTP 解析成对象了。


二、解析 HTTP 响应(客户端)

如果你是调用别人接口,需要解析 HTTP 响应。


1️⃣ Java 11+ HttpClient(推荐 ✅)

发送并解析 HTTP 响应

import java.net.http.*;
import java.net.URI;

public class HttpDemo {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newHttpClient();

        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://www.baidu.com"))
                .GET()
                .build();

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

        // 状态行
        int statusCode = response.statusCode();

        // 响应头
        HttpHeaders headers = response.headers();
        headers.firstValue("Content-Type").ifPresent(System.out::println);

        // 响应体
        String body = response.body();
        System.out.println(body);
    }
}

✅ 现代、简洁、官方推荐
✅ 自动解析 HTTP 响应结构


2️⃣ Apache HttpClient(老牌)

CloseableHttpClient client = HttpClients.createDefault();
HttpGet get = new HttpGet("https://www.baidu.com");

try (CloseableHttpResponse response = client.execute(get)) {
    System.out.println(response.getStatusLine());
    System.out.println(EntityUtils.toString(response.getEntity()));
}

三、手动解析 HTTP 报文(底层)

如果你拿到了原始 HTTP 文本(如 Socket 编程):

GET /test?a=1 HTTP/1.1
Host: localhost
User-Agent: curl/7.0

你可以手动解析:

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

// 请求行
String requestLine = reader.readLine(); // GET /test?a=1 HTTP/1.1
String[] parts = requestLine.split(" ");

String method = parts[0];
String path = parts[1];
String protocol = parts[2];

// 请求头
String line;
while (!(line = reader.readLine()).isEmpty()) {
    String[] header = line.split(": ", 2);
    System.out.println(header[0] + " -> " + header[1]);
}

⚠️ 一般不推荐,除非你在写 HTTP 服务器或学习协议


四、解析 HTTP 参数 / JSON 等

解析 JSON(HTTP 常见)

ObjectMapper mapper = new ObjectMapper();
Map map = mapper.readValue(jsonString, Map.class);

解析 URL 参数

String query = "?a=1&b=2";
String[] pairs = query.split("&");

五、总结(怎么选)

场景 推荐方式
写接口 Spring Boot / Servlet
调接口 java.net.http.HttpClient
底层学习 Socket + 手动解析
老项目 Apache HttpClient

如果你能说清楚:

  • ✅ 是客户端还是服务端
  • ✅ 是解析请求还是响应
  • ✅ 是否有原始 HTTP 报文

我可以直接给你最合适、最精简的示例代码

向AI问一下细节

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

AI