java - 如何使用 Jetty 客户端根据请求获取 bytesIn/bytesOut
问题描述
我正在使用 Jetty Client 11 并希望为每个请求计算发送/接收的字节。
我正在使用高级 HttpClient 。我已阅读此文档,但没有看到有关如何执行此操作的任何信息:
我看到有一种方法可以通过以下方式获取这些信息:
ConnectionStatistics connectionStatistics = new ConnectionStatistics();
httpClient.addBean(connectionStatistics);
然后:
Request request = httpClient.newRequest(uri)
.version(HttpVersion.HTTP_2)
.timeout(CONNECTION_TIMEOUT_SECONDS, TimeUnit.SECONDS);
request.send(listener);
ConnectionStatistics connectionStatistics = httpClient.getBean(ConnectionStatistics.class);
System.out.println(connectionStatistics.getSentBytes()+"/"+ connectionStatistics.getReceivedBytes());
而且我一定做错了什么,因为它甚至不能在全球范围内工作,它总是给出 0。
无论如何,我不知道如何让它在请求的基础上工作。
编辑:
我试过@sbordet 答案:
httpClient.newRequest(...)
.onRequestContent((req, buf) -> requestBytes.add(buf.remaining()))
...
.onResponseContent((res, buf) -> responseBytes.add(buf.remaining()))
...
send(...);
它适用于响应。 但是对于请求,我想测量发送的字节,它总是给出 0(注意我只有没有内容的获取),而我希望有原始大小(原始 HTTP 请求字节,包括标头大小......)
解决方案
您可以使用以下方法计算请求字节数Request.ContentListener
和使用响应字节数Response.ContentListener
:
httpClient.newRequest(...)
.onRequestContent((req, buf) -> requestBytes.add(buf.remaining()))
...
.onResponseContent((res, buf) -> responseBytes.add(buf.remaining()))
...
send(...);
推荐阅读
- python - aiohttp 中的 Python HTTP cookie jar 实现
- python - 将一个数字四舍五入到一个数字范围 Python
- python - Django Rest Framework (DRF) 中的 Python/DJango 'django.db.utils.OperationalError: no such table'
- javascript - 前端和后端验证协同
- docker - 使用多个 compose 文件时使用 docker-compose 拉取最新的 docker 镜像
- python - 查找字符串中缺少左括号的术语
- r - 在没有 R 的情况下生成 bupaR 流程图可视化
- python - 如何在 ModelForm 上使用额外的 ModelChoiceField?
- java - Java 8+ 中 CompletableFuture 的异步执行/操作
- kotlin - 撰写导航标题未更新