java - 多部分实体生成器 : Omit Content-Type and Content-Transfer

标签 java apache-httpcomponents

我正在尝试使用 org.apache.http.entity.mime.MultipartEntityBuilder 在 multipart/form-data POST 请求上模仿我的浏览器行为

我的浏览器只发送 Content-Disposition,但不发送 Content-Type 或 Content-Transfer-Encoding header 。 我尝试使用 MultipartEntityBuilder.addPart() 和 addTextBody() 但默认情况下都添加了这些 header :

我想要什么(我的 chrome 浏览器做什么):

POST .../some.jsp HTTP/1.1
Host: ...
Connection: keep-alive
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary6tcnkxC7txvqE5Xl


------WebKitFormBoundary6tcnkxC7txvqE5Xl
Content-Disposition: form-data; name="merkmal"

5

我从 MultipartEntityBuilder 得到了什么

POST.../some.jsp HTTP/1.1
Host: ...
Content-Type: multipart/form-data; boundary=m9Zb2QD-QaH-j-HqgGQfI8KwDkToz17ULYkZ

--m9Zb2QD-QaH-j-HqgGQfI8KwDkToz17ULYkZ
Content-Disposition: form-data; name="merkmal"
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit

5

Why?: 指定服务器认为name="merkmal"之后的所有内容都是merkmal 的值(包括Headers)。其他可能的原因:整个请求是否有某种错误的编码(尤其是换行符)?

最佳答案

好的 - 激烈的谷歌搜索终于产生了答案。

1) 显然有些服务器不能很好地处理“Content-Transfer-Encoding” header 。

2)HttpComponents中有一个浏览器兼容模式是这样使用的:

MultipartEntityBuilder uploadEntityBuilder = MultipartEntityBuilder.create().setMode(HttpMultipartMode.BROWSER_COMPATIBLE);

使用兼容性代码,不再使用两个不需要的 header (Content-Transfer-Encoding 和 Content-Type)!

我希望有一天这能帮助像我这样的可怜人 ;)

关于java - 多部分实体生成器 : Omit Content-Type and Content-Transfer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26000086/

相关文章:

java.net.SocketException : Software caused connection abort: recv failed

java - 如何基于Scope使用@PreAuthorize保护spring-security-oauth资源?

java-7 - 尝试使用 API 时出错。 java.lang.NoSuchFieldError : INSTANCE

java - 替换/覆盖 android-sdk 的类

java - httpclient 可以使用当前登录用户自动创建授权 header 作为 java URLConnection 吗?

java - Java 程序中 SSLKEYLOGFILE 的等价物是什么?

java - apache httpcomponent 和 sftp 协议(protocol) - 可以使用该协议(protocol)吗?

java - 如何使用 iText 以外的其他内容从模板 PDF 生成 PDF 输出?

java - JSON 数组的 HTML 表单输入等效项是什么?

java - 使用 request.getpart 时出现空指针异常