当前位置: 首页 > 知识库问答 >
问题:

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

酆意智
2023-03-14

我使用的是ApacheHttpComponentsV4.3.3(maven httpclient和httpmime)。我需要上传一个带有元数据的文件。工作的curl命令如下所示。

curl-k-i-h“content-type:multipart/mixed”-x post--form'field1=val1'--form'field2=val2'--form'file=@somefile.zip;type=application/zip'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:请求被拒绝,因为找不到多部分边界

当我给卷曲添加一个痕迹

curl--trace-k-i-h“content-type:multipart/mixed”-x post--form'field1=val1'--form'field2=val2'--form'file=@somefile.zip;type=application/zip'https://www.some.domain/

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

内容-处置:表单-数据;name=field1...value1

知道我做错了什么吗?感谢任何帮助。

共有1个答案

归鸿朗
2023-03-14

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

  • 不再使用addPart(...)
  • 不再设置内容类型头

下面是修改后的代码片段,以防有人感兴趣。

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);
-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
 类似资料:
  • 本文向大家介绍sass 创建和使用混合,包括了sass 创建和使用混合的使用技巧和注意事项,需要的朋友参考一下 示例 要创建一个mixin,请使用@mixin指令。 您可以在mixin名称后面的括号内指定参数列表。切记以变量开头,$并用逗号分隔。 要在另一个选择器中使用mixin,请使用@include指令。 从混入样式将目前在使用footer,并header与值#ccc的$color变量,#dd

  • 我正在开发基于Spring 3.2的RESTful服务。我遇到了一个控制器处理混合多部分HTTP请求的问题,第二部分是XML或JSON格式的数据,第二部分是图像文件。 我正在使用@Request estPart注释来接收请求 User.java会这样- 据我所知,使用@RequestPart注释,我希望根据XML多部分部分的内容类型对其进行评估,并最终将其解编组到我的用户类中(我使用的是Jaxb2

  • 我正在使用Nodejs连接GoogleApis v35。0.0告诉Google更新或删除Google索引中的页面。当我通过Google索引批处理请求发送请求时,我陷入了多部分/混合请求,多部分的主体。 通过遵循索引API文档,我可以向Google发送一个单独的页面更新请求。但是由于谷歌每天最多有200个请求,所以我需要更新更多的URL。所以,我尝试使用谷歌索引批量请求,它最多可以对100个单独的请

  • 我正在努力创建与邮差Chrome扩展的多部分/混合请求 这是我的卷曲要求什么工作很好 应答的有趣部分 null

  • 我需要向我的Spring控制器发送一个带有json的文件。我有以下控制器类: 但当我在服务器上使用以下命令时: 我得到415不支持的媒体类型! 有线索吗?

  • 我有一个表单数据以及文件要在同一职位上发送。对于ex,{duration:2000,file:test.wav}。我在这里看到了使用python请求发布多部分/表单数据的许多线程。它们很有用,尤其是这个。 我的示例请求如下: 5:59:55.338 Dbg 09900[DEBUG]处理程序解析异常[null]:org.springframework.web.multipart.multipartE