Как добавить заголовок Content-Length в HttpPost в Apache HttpComponents?

У меня есть сервер, который ожидает Content-Length как часть заголовка POST. Для публикации я использую библиотеку Apache HttpComponents.

Это урезанная версия ожидаемого запроса (конечно, со всеми необходимыми заголовками):

POST /ParlayREST/1.0/sample/ HTTP/1.1
Content-Type: application/json
Accept: application/json
Host: server.url.com:8080
Content-Length: 287
{
    "listenerURL":"http://application.example.com/notifyURL"},
    "sessionId":"12345"
}

Я использовал метод setEntity для HttpPost, чтобы установить StringEntity (преобразованный json -> String -> StringEntity) в качестве содержимого POST. Но когда я выполняю запрос, я получаю запрос POST, в заголовке которого не указана Content-length.

Есть ли способ добавить этот отсутствующий заголовок?

(Я попытался setHeader() установить Content-Length, что выдало ошибку о том, что длина контента уже присутствует)

Это код, который я использую для создания запроса POST:

//Convert the registration request object to json
StringEntity registrationRequest_json_entity = new StringEntity(gsonHandle.toJson(registrationRequest));
registrationRequest_json_entity.setContentType("application/json");

//Creating the HttpPost object which contains the endpoint URI
HttpPost httpPost = new HttpPost(Constants.CLIENT_REGISTRATION_URL);
httpPost.setHeader(HTTP.CONTENT_TYPE,"application/json");
httpPost.setHeader("Accept","application/json");
httpPost.setHeader(HTTP.TARGET_HOST,Constants.REGISTRATION_HOST + ":" + Constants.REGISTRATION_PORT);

//Set the content as enitity within the HttpPost object     
httpPost.setEntity(registrationRequest_json_entity);

HttpResponse response = httpClient.execute(httpPost, new BasicHttpContext());
HttpEntity entity = response.getEntity();
if (entity != null) {
    //work on the response
}
EntityUtils.consume(entity);

person user2265993    schedule 10.04.2013    source источник
comment
Можете ли вы добавить код, который вы используете для создания запроса?   -  person vptheron    schedule 10.04.2013
comment
Конечно .. обновлю пост с моим кодом   -  person user2265993    schedule 11.04.2013
comment
Как вы определяете, что заголовок Content-Length не отправляется?   -  person Perception    schedule 19.04.2013


Ответы (2)


HttpClient автоматически генерирует значения заголовков Content-Length и Transfer-Encoding на основе свойств вложенного объекта сообщения и фактических настроек протокола.

Не устанавливайте эти заголовки вручную.

person ok2c    schedule 05.11.2019

Пытаться:

httppost.setHeader(HTTP.CONTENT_LEN,"0");

Это установит длину содержимого на 0.

person My God    schedule 31.07.2013