如何使用 Java 传输 HTTP 请求的正文

Jur*_*eld 5 java streaming http

我有一个InputStream和将要输出的数据的大小(HTTP 请求的响应)。由于空间复杂性的原因,我无法阅读全文。我想要的是将数据直接发送到新的请求正文中。我尝试使用 OkHttp 执行此操作,但无法使其工作。我不知道有任何其他 HTTP 客户端可以做到这一点。

如果可能的话,我想避免与Socket. 有什么建议吗?

编辑:添加的限制是该解决方案必须与 Java 8 一起使用

dan*_*iel 2

HttpClient我相信Java 11 中的新标准化应该可以让您做到这一点。它使用FlowAPI(反应流),您可以提供一个BodyHandler/BodySubscriber来请求/接收字节。它还允许您在发送请求时HttpClient指定 a 。BodyPublisher因此,只需将请求发布者转发的订阅绑定到其订阅者,绑定到BodySubscriberHttp 堆栈分发给的订阅,然后让 的BodySubscriberonNext等等)调用Publisher订阅者的相应方法即可。请注意,这是一个学术描述:我实际上并没有尝试实现它。设置订阅链接可能需要一些思考和一些技巧,但我相信它应该有效。

但是,请确保您的实现BodySubscriber/BodyPublisher遵守反应式流语义 - 并且它们不会阻塞回调。

https://docs.oracle.com/en/java/javase/11/docs/api/java.net.http/java/net/http/HttpClient.html https://openjdk.java.net/groups/net /httpclient/intro.html

再想一想,也许这不是您要问的:如果您已经有一个,InputStream那就更简单了:只需BodyPublishers.ofInputStream在发送请求时使用即可。

https://docs.oracle.com/en/java/javase/11/docs/api/java.net.http/java/net/http/HttpRequest.BodyPublishers.html#ofInputStream(java.util.function.Supplier)