Apache HttpClient 5 覆写请求体与Content-Length异常问题
Apache HttpClient 5 请求体覆写与Content-Length问题处理
这不是Bug,而是HttpClient 5对拦截器机制的设计调整——引入EntityDetails是为了更规范地管理请求体元数据(如内容长度、编码等),原请求对象的entity参数被废弃后,RequestContent拦截器会优先依赖EntityDetails生成Content-Length头。
针对证书签名的场景,推荐两种更合理的替代方案:
调整拦截器顺序并同步更新元数据
将你的签名拦截器放在RequestContent拦截器之前执行,覆写请求体后,要么通过HttpRequest.setEntity()设置新实体(HttpClient多数场景下会自动同步EntityDetails),要么手动更新EntityDetails中的内容长度等信息,确保RequestContent能获取到正确的元数据。使用自定义
HttpEntityWrapper包装实体
无需直接替换整个entity,实现HttpEntityWrapper类,在getContent()方法中返回签名后的请求体流,同时重写getContentLength()返回签名后的内容长度。这样RequestContent拦截器通过EntityDetails就能拿到正确的Content-Length值。
你当前采用的「添加最后一个拦截器覆写Content-Length」属于临时修复方案,虽能解决问题,但属于事后修正,不如前两种方案规范。
内容的提问来源于stack exchange,提问作者Scrat
相关产品推荐
相关产品推荐

