apache httpclient longueur du contenu de problème
Je suis en train de poster quelques JSON à un service rest en utilisant Apache Httpclient. Cependant, j'ai cette erreur :
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());
J'ai lu sa parce que je suis réglage de la longueur du contenu de deux fois déjà, mais je ne suis pas sûr de savoir comment le résoudre.
OriginalL'auteur Matt Broekhuis | 2011-03-29
Vous devez vous connecter pour publier un commentaire.
Votre code fonctionne très bien pour moi à l'aide de HttClient 4.1.1. Quelle version utilisez-vous?
Si vous êtes certain que vous n'êtes pas le réglage de la
Content-Length
en-tête une seconde fois dans votre code (le code affiché ci-dessus est exactement le code que vous êtes en cours d'exécution) alors peut-être que vous pourriez essayer de mettre à jour vers la version la plus récente de la httpclient de la bibliothèque. Vous pouvez éventuellement être confronté à un bug obscure comme HTTPCLIENT-795.OriginalL'auteur joelittlejohn
Je me rends compte qu'il a été un certain temps depuis que cette question a été posée, mais voici la solution que j'ai trouvé:
Dans le cas où vous ne pouvez pas modifier le client pots, la solution de contournement que j'ai utilisé est:
Apache http client dispose d'un intercepteur de demande qui calcule automatiquement et ajoute le contenu de la longueur de l'en-tête, qui se fait aussi par le ws de la bibliothèque.
Avec le code ci-dessus, l'intercepteur est exclu de la demande de traitement.
L' ".setHttpProcessor(HttpProcessorBuilder.create().build())" a fonctionné pour moi. Voir stackoverflow.com/questions/23291209/...
OriginalL'auteur vdimitrov