当前位置:首页 > Java

java 如何打印报文

2026-03-25 05:03:02Java

打印报文的方法

在Java中打印报文(通常指HTTP请求或响应的报文)可以通过多种方式实现,具体取决于使用的网络库或框架。以下是几种常见的方法:

java 如何打印报文

使用HttpURLConnection打印请求和响应报文

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class PrintHttpMessage {
    public static void main(String[] args) throws Exception {
        URL url = new URL("http://example.com");
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();

        // 打印请求头
        System.out.println("Request Headers:");
        connection.getRequestProperties().forEach((k, v) -> System.out.println(k + ": " + v));

        // 发送请求
        int responseCode = connection.getResponseCode();

        // 打印响应头
        System.out.println("\nResponse Headers:");
        connection.getHeaderFields().forEach((k, v) -> System.out.println(k + ": " + v));

        // 打印响应体
        System.out.println("\nResponse Body:");
        try (BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
            String inputLine;
            while ((inputLine = in.readLine()) != null) {
                System.out.println(inputLine);
            }
        }
    }
}

使用Apache HttpClient打印报文

如果使用Apache HttpClient库,可以更灵活地打印报文:

java 如何打印报文

import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

public class PrintHttpMessageWithHttpClient {
    public static void main(String[] args) throws Exception {
        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
            HttpGet request = new HttpGet("http://example.com");

            // 打印请求报文
            System.out.println("Request Line: " + request.getRequestLine());
            System.out.println("Request Headers:");
            Arrays.stream(request.getAllHeaders()).forEach(System.out::println);

            // 执行请求
            HttpResponse response = httpClient.execute(request);

            // 打印响应报文
            System.out.println("\nResponse Status: " + response.getStatusLine());
            System.out.println("Response Headers:");
            Arrays.stream(response.getAllHeaders()).forEach(System.out::println);
            System.out.println("\nResponse Body:");
            System.out.println(EntityUtils.toString(response.getEntity()));
        }
    }
}

使用Spring WebClient打印报文(Spring 5+)

在Spring WebFlux应用中,可以使用WebClient打印报文:

import org.springframework.web.reactive.function.client.WebClient;

public class PrintHttpMessageWithWebClient {
    public static void main(String[] args) {
        WebClient webClient = WebClient.create("http://example.com");

        webClient.get()
            .exchangeToMono(clientResponse -> {
                // 打印响应头
                System.out.println("Response Headers:");
                clientResponse.headers().asHttpHeaders().forEach((name, values) -> 
                    values.forEach(value -> System.out.println(name + ": " + value)));

                // 返回响应体并打印
                return clientResponse.bodyToMono(String.class);
            })
            .doOnNext(body -> System.out.println("\nResponse Body:\n" + body))
            .block();
    }
}

使用日志框架打印报文

在生产环境中,通常使用日志框架(如SLF4J+Logback)来记录报文:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class LogHttpMessages {
    private static final Logger logger = LoggerFactory.getLogger(LogHttpMessages.class);

    public void logRequest(String url, String headers, String body) {
        logger.debug("HTTP Request:\nURL: {}\nHeaders:\n{}\nBody:\n{}", url, headers, body);
    }

    public void logResponse(int status, String headers, String body) {
        logger.debug("HTTP Response:\nStatus: {}\nHeaders:\n{}\nBody:\n{}", status, headers, body);
    }
}

注意事项

  • 生产环境中打印完整报文可能包含敏感信息,需谨慎处理
  • 对于大型报文,考虑截断或摘要打印以避免性能问题
  • 使用日志框架时,可配置不同级别(DEBUG/INFO)来控制报文打印

以上方法覆盖了从基础Java网络API到流行框架的报文打印需求,可根据具体场景选择合适的方式。

标签: 报文java
分享给朋友:

相关文章

java程序如何运行

java程序如何运行

编写Java代码 使用文本编辑器或IDE(如IntelliJ IDEA、Eclipse)编写Java源代码,保存为.java文件。例如: public class HelloWorld {…

如何选择java培训

如何选择java培训

评估培训机构资质 选择有正规资质的机构,查看其营业执照、办学许可证等。优先考虑具备人力资源和社会保障部或教育部认证的机构,这类机构的教学质量和课程设置通常更规范。 考察课程内容与行业需求匹配度…

java实现vue接口

java实现vue接口

Java 实现 Vue 接口的方法 在 Java 中实现 Vue 前端调用的接口,通常需要使用 Spring Boot 框架构建 RESTful API。以下是具体的实现步骤和代码示例。 创建 Sp…

java下载功能vue实现

java下载功能vue实现

Java 后端文件下载功能实现 后端需提供文件下载的接口,通常使用 HttpServletResponse 实现。以下是一个简单的 Java Spring Boot 示例: @GetMapping(…

java 实现 php ord

java 实现 php ord

Java 实现 PHP 的 ord 函数 PHP 的 ord 函数用于获取字符串中第一个字符的 ASCII 值。在 Java 中,可以通过类型转换或直接使用字符的 Unicode 值实现类似功能。…

java实现php

java实现php

Java 实现 PHP 功能的方法 在 Java 中实现 PHP 的功能通常涉及以下几个方面:字符串处理、Web 开发、数据库操作等。以下是几种常见需求的实现方法。 字符串处理 PHP 中的字符串处…