You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用CloseableHttpClient发起请求时遇Content-Length已存在错误的解决咨询

解决CloseableHttpClient中"Content-Length header already present"错误

这个问题很常见,原因其实很直接:Apache HttpClient 4.x版本会自动根据请求体的内容计算并添加Content-Length请求头,而你手动调用httpPost.setHeader("Content-Length", "0");又设置了一遍,导致头信息重复,触发了这个错误。

下面给你两种解决方案,优先推荐第一种:

方案1:移除手动设置的Content-Length头

这是最简洁也最可靠的做法,直接删掉代码里的httpPost.setHeader("Content-Length", "0");这一行。

当你的请求没有请求体时,HttpClient会自动处理Content-Length(设置为0)或者使用Transfer-Encoding: chunked,完全不需要你手动干预。修改后的完整代码如下:

package com.dotcomculture.arbbot;

import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.CloseableHttpResponse;

public class ArbBot {
    public static void main(String [ ] args)throws Exception{
        System.out.println("I am in main" );
        CloseableHttpClient httpClient = HttpClients.createDefault();
        HttpPost httpPost = new HttpPost("https://api.sandbox.gemini.com");
        httpPost.setHeader("Content-type", "text/plain");
        // 移除了手动设置的Content-Length头
        httpPost.setHeader("X-GEMINI-APIKEY", "API KEY HERE");
        httpPost.setHeader("X-GEMINI-PAYLOAD", "Payload here");
        httpPost.setHeader("X-GEMINI-SIGNATURE", "Signature here");
        // 额外提示:Cache-Control设置为"0"不符合规范,建议改成合法值比如"no-cache"
        httpPost.setHeader("Cache-Control", "no-cache");
        CloseableHttpResponse closeableHttpResponse = httpClient.execute(httpPost);
        int statusCode = closeableHttpResponse.getStatusLine().getStatusCode();
        System.out.println("Status Code : " +statusCode );
    }
}

方案2:关闭Content-Length校验(特殊场景用)

如果你确实有特殊需求必须手动设置Content-Length,可以通过修改HttpClient的配置来关闭重复头的校验。创建HttpClient时使用自定义构建器:

CloseableHttpClient httpClient = HttpClients.custom()
        .disableContentLengthValidation()
        .build();

不过除非你明确知道自己在做什么,否则不推荐这种方式——自动处理Content-Length能避免很多因请求体变化导致的长度不匹配问题。

另外提个小细节:你的POM里单独引入了httpcore依赖,其实httpclient已经包含了对应的httpcore依赖,不需要重复引入,可以把这部分删掉,避免版本不一致的潜在问题。

内容的提问来源于stack exchange,提问作者Caulinez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:39:12