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

apache cxf多部分请求没有内容长度头

曾嘉言
2023-03-14

我有下面的代码发送一个多部分/表单数据请求。

List<Attachment> multipartData = new ArrayList<>();
ContentDisposition cd1 = new ContentDisposition("form-data; name=\"file\"; 
filename="+fileObj.getName());

FileInputStream inputStream = new FileInputStream(fileObj);
multipartData.add(new Attachment("file",inputStream, cd1));

MultipartBody multipart = new MultipartBody(multipartData);

在我的RestClient类中,我使用下面几行代码使用JAX-RS客户机对象发送POST请求

if ("POST".equals(method)) {
            response = this.client.getBuilder().post(Entity.entity(entity,MediaType.MULTIPART_FORM_DATA));

我使用Wiremock检查了HTTP请求主体,如下所示:

Transfer-Encoding: [chunked]
Accept: [*/*]
Cache-Control: [no-cache]
User-Agent: [Apache-CXF/3.2.5]
Connection: [keep-alive]
Host: [127.0.0.1:9990]
Pragma: [no-cache]
Content-Type: [multipart/form-data; boundary="uuid:04b491f5-50de-4f4f-b7c0-cd745136d3d1"]

--uuid:04b491f5-50de-4f4f-b7c0-cd745136d3d1
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary
Content-ID: <file>
Content-Disposition: form-data; name="file"; filename=sample.txt

<File content goes here>

我想知道请求负载中的内容长度标头是如何丢失的。有没有办法设置请求的内容长度标头?

请帮帮我。

共有1个答案

郜琦
2023-03-14

我使用apache cxf WebClient将传输编码设置为分块。

if ("POST".equals(method)) {
    Invocation.Builder builder = this.client.getBuilder();
    WebClient.getConfig(builder).getHttpConduit().getClient().setAllowChunking(false);
    response = builder.post(Entity.entity(entity,MediaType.MULTIPART_FORM_DATA));
}

这样,客户机就可以发送带有内容长度头的请求。

 类似资料:
  • 使用简单的按预期设置所有标头。 什么样的问题可能导致这种行为?

  • 即使我使用的是高级多部分,我仍然在控制台中收到警告: 这就是我使用高级分段上传的方式,就像这里一样:https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpu-upload-object.html 5248000是5MB,我尝试上传比这大得多的文件,所以它应该使用多部分策略,正如它在文档中所说: 设置何时使用分段上传的大小阈值(以字节为单位)

  • 我试图计算http post请求的请求体的内容长度,但我不断得到错误,表明内容长度错误。请求正文如下所示: 我尝试了两种解决方案,比如将正文的内容连接成一个字符串,比如following,然后将其转换成字节数组并发送其长度,但没有成功。 帖子请求正文是x-wow-form-urlencoded格式,内容长度必须正确计算。任何帮助都很感激,谢谢。

  • 我正在尝试通过API发送post请求。呼叫要求: 我已经使用Charles HTTP代理查看需要发送哪些头/内容。 我的请求:(基本上抄录自查尔斯的多部分章节) 如有任何帮助,我们将不胜感激!干杯!

  • 我试图在Spring Boot中使用RestTemplate来模拟这个请求 这是我的代码: 上面的请求抛出一个HttpClientErrorException,这就是响应体的样子 {“错误”:{“消息”:“需要多部分/表单数据;边界=<..>内容,但获得多部分/表单数据;边界=X6G0xWVXDZX4N8PYNU8IHGANGG4TWJ3DGMaryDS。”,“代码”:“错误内容类型”}} 我也尝

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