Java 11 引入了Java HttpClient API,实现了最新HTTP标准的客户端部分。它支持HTTP/1.1和HTTP/2,提供了同步和异步编程模型。
我们可以使用它发送HTTP请求并获取响应。在Java 11之前,我们不得不依赖原始的URLConnection实现,或第三方库如Apache HttpClient。
在这个教程中,我们将学习如何使用Java HttpClient发送POST请求。我们将展示如何发送同步、异步以及并发POST请求,并查看如何添加身份验证参数和JSON。最后,我们将了解如何上传文件和提交表单数据,从而覆盖大部分常见用例。
在发送HTTP请求之前,我们需要先创建一个HttpClient实例。
实例可以通过其构建器进行配置和创建,使用方法。如果没有特殊配置需求,我们可以使用实用方法创建一个默认客户端:
默认使用HTTP/2,如果服务器不支持HTTP/2,它会自动降级到HTTP/1.1。
现在,我们准备好使用构建器创建一个实例。稍后我们会使用这个客户端实例发送请求。POST请求的最小参数包括服务器URL、请求方法和主体:
请求主体需要通过类提供。这是一个响应式流发布者,按需发布请求体的流。在我们的示例中,我们使用了一个不发送请求主体的body发布者。
现在我们已经准备好了POST请求,让我们看看发送它的不同方式。
我们可以使用默认的方法发送准备好的请求。这个方法将阻塞代码直到收到响应:
实用工具实现了各种有用的处理器,例如将响应体作为处理或将响应体流式写入文件。一旦收到响应,对象将包含响应状态、头和体:
我们可以使用方法异步发送上一个示例中的相同请求。与同步方法不同,这个方法会立即返回一个实例:
一旦可用,它将完成并返回:
我们可以结合Stream和来 并发发送多个请求并等待它们的响应:
现在,让我们等待所有请求完成,以便一次处理它们的响应:
由于我们使用了和方法组合所有响应,我们得到了一个新的,其中包含了我们的响应:
我们可以在客户端级别设置一个身份验证器,以便在所有请求中进行HTTP身份验证:
然而,不会在服务器发送带有头的挑战时自动发送基本凭据。
为了绕过这个问题,我们可以始终手动创建并发送Authorization请求头:
使用 工具类可以很方便的发送各种数据类型,从类型到文件上传。我们可以将JSON数据作为字符串类型发送:
让我们创建一个临时文件,以便通过上传:
提供了单独的方法,用于将文件添加到POST请求体中:
与文件不同,没有提供专门用于提交表单数据的方法。因此,我们仍然需要使用BodyPublishers.ofString方法:
但是,我们需要将表单数据从转换为,使用自定义实现:
在这篇文章中,我们探讨了Java 11中引入的Java HttpClient API发送POST请求的方法。
我们学习了如何创建实例和准备POST请求。我们看到了如何同步、异步和并发发送准备好的请求。接着,我们也了解了如何添加基本身份验证参数。
最后,我们研究了如何向POST请求添加主体。我们涵盖了JSON负载、文件上传和表单提交。
如往常一样,完整的源代码可在GitHub上找到。
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/5998.html