我正在使用 AWS CRT HTTP 客户端 创建 HTTP 请求,但我找不到设置请求正文的方法。我将 Java 11 与 AWS SDK 版本 2.27.9 结合使用。无论我如何配置这个同步客户端,我的请求都没有请求正文。
我尝试使用
SdkHttpFullRequest builder和 HttpExecuteRequest builder 上的
contentStreamProvider
字段设置请求正文。使用两者,我可以提供一个完整的示例:
SdkHttpClient httpClient = AwsCrtHttpClient.builder().build();
SdkHttpFullRequest sdkHttpRequest = SdkHttpFullRequest.builder()
.uri(new URI("http://127.0.0.1:5000/post"))
.contentStreamProvider(ContentStreamProvider.fromUtf8String("'{\"foo\":\"bar\"}'"))
.method(SdkHttpMethod.POST)
.appendHeader("accept", "application/json")
.appendHeader("Content-Type", "application/json")
.build();
HttpExecuteRequest request = HttpExecuteRequest.builder()
.request(sdkHttpRequest)
.contentStreamProvider(ContentStreamProvider.fromUtf8String("'{\"foo\":\"bar\"}'"))
.build();
HttpExecuteResponse response = httpClient.prepareRequest(request).call();
我正在端口 5000 上运行本地 Python Flask 应用程序来查看请求数据,但尽管我努力设置请求正文,但请求正文始终为空。我尝试过其他服务器,本地和远程,但它们也没有接收数据。
事实证明,AWS CRT HTTP 客户端并不是真正可以替代内置 Java HTTP 客户端的完整 HTTP 客户端。它需要进行配置,然后注入到其他 AWS 服务客户端中。我们决定继续使用标准 Java HTTP 客户端,并不再使用 AWS CRT HTTP 客户端来处理 HTTP 请求。