java - 如何使用 Java Http 客户端发送带有 multipart/form-data 主体的 PUT 请求?

标签 java http multipartform-data java-http-client

我正在使用 java.net.http 上提供的 HttpClientHttpRequest。我已经成功发送了一些 GET 和 POST 请求,但我不知道如何使用 multipart/form-data body 发送 PUT/POST 请求:

HttpRequest dataRequest = HttpRequest.newBuilder()
        .header("accept", "*/*")
        .header("Content-Type", "multipart/form-data")
        // .POST() ??
        .uri(URI.create(DATA_URL)
        .build();

该请求的curl 等效项类似于:

curl -X PUT "https://www.example.com/data" -H  "accept: */*" -H  "Content-Type: multipart/form-data" -F "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="a3c5cacfc69ee3c2d6c7caccc5cacfc68dd4c2d5" rel="noreferrer noopener nofollow">[email protected]</a>;type=audio/wav"

我应该在 POST()PUT() 方法中使用某种 BodyPublishers 来实现这一目标吗?有什么线索吗?

最佳答案

HttpClient API 尚不支持开箱即用的 Multipart/form-data。

在 JDK 16 中,有一个新的 HttpRequest.BodyPublishers.concat(BodyPublisher...) 方法,可用于帮助构建通过来自异构源的字节串联构建的请求正文。 但是您必须手动组合所有不同的部分,并在需要时处理 base64 编码。

您还可以尝试methanol

关于java - 如何使用 Java Http 客户端发送带有 multipart/form-data 主体的 PUT 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67017711/

相关文章:

带有发送空正文的 formdata 的 Javascript XMLHttpRequest

java - 启动新 Activity 后,前一个 Activity 是否有可能继续通过 Intent 向新 Activity 发送数据?

java - 将 throwable 重新抛出为未检查的实用程序类?

java - Spark-Java : Concatenate aggregated groupBy's result

ruby-on-rails - 带有自定义 header 和正文的 Ruby POST?

node.js - 如何发布 "multipart/form-data"表单并从 Node.js 服务器获取文本字段值?

带文件上传的jMeter多部分请求

java - 同一个包中的@Around @Aspect 仅适用于@DependsOn

http - 如何传递 'XML' 输入以使用 Http 适配器在 IBM Mobile First 中使用 API

php - 尝试使用 C 向本地服务器发送 POST 请求