Pregunta

Estoy tratando de publicar a algunos JSON a un servicio de descanso utilizando Apache HttpClient.Sin embargo, obtengo este error:

    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());

He leído porque ya estoy configurando la longitud del contenido dos veces, pero no estoy seguro de cómo solucionarlo.

¿Fue útil?

Solución

Tu código funciona bien para mí usando httclient 4.1.1.¿Qué versión está utilizando?

Si está seguro de que no está configurando el encabezado de Content-Length por segunda vez en su código (es decir, el código publicado anteriormente es exactamente el código que está ejecutando), tal vez podría intentarloActualización de la última versión de la biblioteca HTTPClient.Posiblemente podría experimentar un error oscuro como httpclient-795 .

Otros consejos

Me doy cuenta de que ha sido un tiempo, ya que se ha preguntado esta pregunta, pero aquí está la solución que encontré: En caso de que no pueda cambiar los frascos del cliente, la solución que utilicé es:

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

El cliente HTTP de Apache tiene un interceptor de solicitud que calcula automáticamente y agrega el encabezado de la longitud del contenido, que también realiza la biblioteca WS. Con el código anterior, este interceptor está excluido del procesamiento de solicitud.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top