java - 如何使用 java.net.http.HttpClient 记录请求/响应?

标签 java logging java-9 java-11 java-http-client

HttpClient在 Java 9 中实验性引入的 Java 现在在 Java 11 中是稳定的,但毫不奇怪,似乎很少有项目真正使用它。文档几乎不存在。

进行 HTTP 调用时最常见的问题之一是记录请求/响应。您将如何使用 HttpClient 做到这一点,当然不用在每次调用中手动记录它?是否有像所有其他 HTTP 客户端提供的那样的拦截器机制?

最佳答案

您可以通过在 Java 命令行上指定
-Djdk.httpclient.HttpClient.log=requests 来记录请求和响应。

至于测试/模拟你可能想看看离线测试: http://hg.openjdk.java.net/jdk/jdk/file/tip/test/jdk/java/net/httpclient/offline/

根据您希望实现的目标,您也可以使用“DelegatingHttpClient”来拦截和记录请求和响应。

除了 Java API 文档之外,还有一些高级文档位于 http://openjdk.java.net/groups/net/httpclient/index.html

补充说明:

jdk.httpclient.HttpClient.log 属性是一个特定于实现的属性,其值是一个逗号分隔的列表,可以在 Java 命令行上使用以下值进行配置以用于诊断/调试目的:

-Djdk.httpclient.HttpClient.log=
       errors,requests,headers,
       frames[:control:data:window:all],content,ssl,trace,channel,all

关于java - 如何使用 java.net.http.HttpClient 记录请求/响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53215038/

相关文章:

linux - 在 Linux 上使用 sendmail 将邮件消息保存为文件

java - 为什么 HashSet 在 Java 8 和 Java 9+ 中表现不同?

java - 在具有模块间测试依赖性的 Maven 构建中正确实现 Java 模块

java - Spring Boot中数据库测试之前有条件设置@Activeprofile

java - 如何在 sqlite 中使用自动增量变量?

python - 在 unittest 中更改日志级别

java - 将包私有(private)类导入 JShell

Java - 线程计算速度更慢

java - 更新我的项目时遇到问题,图像 BLOB 格式 [JAVA]

java - Log4j 登录到多个文件