我正在尝试将来自 HTTP (GET) 响应的数据流式传输到另一个 HTTP (POST) 请求。使用旧的 HttpURLConnection,我将获取响应 OutputStream,将部分读入缓冲区并将它们写入请求 InputStream。
我已经设法在 Java 11 中对 HttpClient 做同样的事情,方法是创建我自己的 Publisher,在 POST 中使用它来编写请求正文。GET 请求有一个BodyHandler
withofByteArrayConsumer
将块发送到自定义发布者,然后它自己将块发送到订阅 HTTP POST 请求。
但我认为这不是正确的方法,因为看起来 API 中有一些东西看起来可以直接完成,而无需自己实现发布者和订阅者。
有HttpResponse.BodyHandlers.ofPublisher()
一个返回一个Publisher<List<ByteBuffer>
我可以用于 HTTP GET 请求的。不幸的是,对于我的 POST 请求,HttpRequest.BodyPublishers.fromPublisher
它需要一个Publisher<? extends ByteBuffer>
,所以似乎 fromPublisher 仅适用于拥有完整 ByteBuffer 的发布者,而不适用于为部分数据发送多个 ByteBuffer 的发布者。
我是否错过了一些能够将 BodyPublisher 从一个请求连接到另一个请求的东西?