проблема длины содержимого apache httpclient - PullRequest
3 голосов
/ 30 марта 2011

Я пытаюсь отправить JSON в службу отдыха, используя Apache Httpclient. Тем не менее, я получаю эту ошибку:

    Exception in thread "main" org.apache.http.ProtocolException: Content-Length header already present

UsernamePasswordCredentials defaultcreds = new UsernamePasswordCredentials(USER,
            PASS);


    HttpHost targetHost = new HttpHost("localhost", 8080, "http");

    DefaultHttpClient httpclient = new DefaultHttpClient();

    httpclient.getCredentialsProvider().setCredentials(
            new AuthScope(targetHost.getHostName(), targetHost.getPort()),
            new UsernamePasswordCredentials(USER, PASS));


    HttpPost httpPost = new HttpPost(urlSuffix) {};

    JSONObject holder = new JSONObject();
    holder.put("name", "this is a folder");


    StringEntity se = new StringEntity(holder.toString());

    httpPost.setHeader("Accept", "application/json");
    httpPost.setHeader("Content-type", "application/json");
    httpPost.setEntity(se);



    HttpResponse resp = httpclient.execute(targetHost,httpPost);

    System.out.println("Resp->" + resp.getStatusLine().getStatusCode());

Я прочитал его, потому что уже дважды задаю длину контента, но не уверен, как это исправить.

Ответы [ 2 ]

5 голосов
/ 01 сентября 2014

Я понимаю, что прошло некоторое время с тех пор, как был задан этот вопрос, но вот решение, которое я нашел: Если вы не можете изменить клиентские банки, я использовал обходной путь:

httpClient.removeRequestInterceptorByClass(org.apache.http.protocol.RequestContent.class);

У клиента Apache http есть перехватчик запросов, который автоматически вычисляет и добавляет заголовок длины содержимого, что также делается библиотекой ws. С помощью приведенного выше кода этот перехватчик исключается из обработки запроса.

2 голосов
/ 31 марта 2011

Ваш код отлично работает для меня, используя HttClient 4.1.1. Какую версию вы используете?

Если вы уверены, что не устанавливаете заголовок Content-Length во второй раз в своем коде (т. Е. Код, указанный выше, точно код, который вы запускаете), то, возможно, вы могли бы Попробуйте обновить до последней версии библиотеки httpclient. Возможно, вы столкнулись с неясной ошибкой типа HTTPCLIENT-795 .

...