如何让Apache HttpClient不发送Content-Type及Content-Transfer-Encoding头?
解决Apache HttpClient发送Multipart表单时自动添加Content-Type和Content-Transfer-Encoding的问题
我之前也碰到过类似的情况——默认情况下,当你用StringBody作为Multipart表单的部件时,HttpClient会自动给这个部件加上Content-Type: text/plain; charset=US-ASCII和Content-Transfer-Encoding: 8bit头,这是因为Multipart的每个部件本质上是一个MIME实体,规范里默认会携带这些元数据。要去掉这两个头,你需要手动创建表单部件并显式移除对应的请求头,而不是直接用addPart的快捷重载方法。
针对HttpClient 4.x版本的解决方案
import org.apache.http.entity.ContentType; import org.apache.http.entity.mime.FormBodyPart; import org.apache.http.entity.mime.MultipartEntityBuilder; import org.apache.http.entity.mime.content.StringBody; import org.apache.http.HttpHeaders; // 初始化Multipart构建器 MultipartEntityBuilder builder = MultipartEntityBuilder.create(); // 创建StringBody实例 StringBody sidBody = new StringBody("abcd", ContentType.DEFAULT_TEXT); // 包装成FormBodyPart并移除不需要的头 FormBodyPart sidPart = new FormBodyPart("_sid", sidBody); sidPart.removeHeader(HttpHeaders.CONTENT_TYPE); sidPart.removeHeader(HttpHeaders.CONTENT_TRANSFER_ENCODING); // 将处理后的部件添加到构建器 builder.addPart(sidPart); // 后续步骤:构建HttpEntity并发送请求...
针对HttpClient 5.x版本的解决方案
HttpClient 5.x的API做了优化,推荐用FormBodyPartBuilder来更灵活地配置部件:
import org.apache.hc.client5.http.entity.mime.FormBodyPart; import org.apache.hc.client5.http.entity.mime.FormBodyPartBuilder; import org.apache.hc.client5.http.entity.mime.MultipartEntityBuilder; import org.apache.hc.client5.http.entity.mime.content.StringBody; import org.apache.hc.core5.http.ContentType; import org.apache.hc.core5.http.HttpHeaders; // 初始化Multipart构建器 MultipartEntityBuilder builder = MultipartEntityBuilder.create(); // 创建并配置表单部件,直接移除目标头 FormBodyPart sidPart = FormBodyPartBuilder.create("_sid", StringBody.create("abcd", ContentType.DEFAULT_TEXT)) .removeHeader(HttpHeaders.CONTENT_TYPE) .removeHeader(HttpHeaders.CONTENT_TRANSFER_ENCODING) .build(); // 添加到构建器 builder.addPart(sidPart); // 后续步骤:构建HttpEntity并发送请求...
小提醒
- 注意区分HttpClient 4.x和5.x的包路径,两者API不兼容,不要混用依赖。
- 移除这些头之前,最好确认服务器端能正常解析这个字段——有些服务器可能依赖
Content-Type来识别数据格式,提前做下测试更稳妥。
内容的提问来源于stack exchange,提问作者yaoweijq
相关产品推荐
相关产品推荐

