为了账号安全,请及时绑定邮箱和手机立即绑定

使用 java 11 HttpClient 将响应主体流式传输到流式请求主体

使用 java 11 HttpClient 将响应主体流式传输到流式请求主体

慕姐8265434 2023-05-24 15:42:33
我正在尝试将数据从 HTTP (GET) 响应流式传输到另一个 HTTP (POST) 请求。使用旧的 HttpURLConnection,我将获取响应 OutputStream,将部分读入缓冲区并将它们写入请求 InputStream。通过创建我自己的 Publisher,我已经设法在 Java 11 中对 HttpClient 执行相同的操作,该 Publisher 在 POST 中用于编写请求正文。GET 请求有一个BodyHandlerwithofByteArrayConsumer将块发送到自定义发布者,然后它自己将块发送到订阅 HTTP POST 请求。但我认为这不是正确的方法,因为看起来 API 中有一些东西看起来可以直接完成而无需自己实现发布者和订阅者。有HttpResponse.BodyHandlers.ofPublisher()一个返回一个Publisher<List<ByteBuffer>我可以用于 HTTP GET 请求的。不幸的是,对于我的 POST 请求,有HttpRequest.BodyPublishers.fromPublisher一个期望值Publisher<? extends ByteBuffer>,因此 fromPublisher 似乎只适用于拥有完整 ByteBuffer 的发布者,而不适用于为部分数据发送多个 ByteBuffer 的发布者。我是否错过了一些能够将 BodyPublisher 从一个请求连接到另一个请求的东西?
查看完整描述

1 回答

?
墨色风雨

TA贡献1853条经验 获得超6个赞

你没有遗漏任何东西。这只是一个目前不支持开箱即用的用例。ByteBuffer尽管从到的映射List<ByteBuffer>很简单,但逆映射却不那么简单。从一个适应另一个的一种简单(如果不是最佳)方法可能是将列表中的所有缓冲区收集到一个缓冲区中 - 如果您想控制从上游接收的每个已发布的字节数,则可能结合HttpResponse.BodyHandlers.ofPublisher()使用.HttpResponse.BodyHandlers.buffering()List<ByteBuffer>



查看完整回答
反对 回复 2023-05-24
  • 1 回答
  • 0 关注
  • 240 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信