如何使用 Apache HttpComponentst 创建和发布多部分/混合 http 请求?

2024-03-26

我正在使用 Apache HttpComponents v4.3.3 (maven httpclient 和 httpmime)。我需要上传包含一些元数据的文件。有效的curl 命令如下所示。

curl -k -i -H“内容类型:多部分/混合”-X POST --form 'field1=val1' --form 'field2=val2' --form '[电子邮件受保护] /cdn-cgi/l/email-protection;类型=应用程序/zip'https://www.some.domain/ https://www.some.domain/

我尝试模仿这个卷曲帖子,如下所示。

HttpEntity entity = MultiPartEntityBuilder
 .create()
 .addPart("field1",new StringBody("val1",ContentType.TEXT_PLAIN))
 .addPart("field2",new StringBody("val2",ContentType.TEXT_PLAIN))
 .addPart("file", new FileBody(new File("somefile.zip"), ContentType.create("application/zip"))
 .build();
HttpPost post = new HttpPost("https://www.some.domain");
post.addHeader("Content-Type", "multipart/mixed");

但是,在我使用 HttpClient 执行 HttpPost 后,出现以下异常(服务器代码也是在 Jetty 上运行的 Java)。

org.apache.commons.fileupload.FileUploadException:请求被拒绝,因为找不到多部分边界

当我为卷曲添加痕迹时

卷曲--trace - -k -i -H“内容类型:多部分/混合”-X POST --form 'field1=val1' --form 'field2=val2' --form '[电子邮件受保护] /cdn-cgi/l/email-protection;类型=应用程序/zip'https://www.some.domain/ https://www.some.domain/

我看到表单字段/值对被设置为 HTTP 标头。

内容处置:表单数据;名称=字段1...值1

知道我在这里做错了什么吗?任何帮助表示赞赏。


我做了一些修改,做了两件事来使代码正常工作。

  • 不再使用 addPart(...)
  • 不再设置 Content-Type 标头

这是修改后的代码片段,如果有人感兴趣的话,可以使用。

HttpEntity entity = MultipartEntityBuilder
 .create()
 .addTextBody("field1","val1")
 .addTextBody("field2","val2")
 .addBinaryBody("file", new File("somefile.zip"),ContentType.create("application/zip"),"somefile.zip")
 .build();
HttpPost post = new HttpPost("https://www.some.domain");
post.setEntity(entity);

我还将 HttpComponents 设置为调试模式。



-Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog
-Dorg.apache.commons.logging.simplelog.showdatetime=true
-Dorg.apache.commons.logging.simplelog.log.org.apache.http=DEBUG
  

事实证明,现在每个部分都有一个边界。更好的是,内容类型和边界是自动生成的。

内容类型:多部分/表单数据;边界=5ejxpaJqXwk2n_3IVZagQ1U0_J_X9MdGvst9n2Tc

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Apache HttpComponentst 创建和发布多部分/混合 http 请求? 的相关文章

随机推荐