Java, HttpURLConnection et définition de la longueur du contenu

Je règle la longueur du contenu de mon HttpURLConnection, pour un PUT.

urlConnection.setRequestProperty("Content-Length", "" + responseJSONArray.toSsortingng(2).getBytes("UTF8").length); 

Le nombre réel d’octets est de 74. Cependant, lorsque je demande la longueur du contenu de urlConnection je suis renvoyé à -1 . Pourquoi donc? Et pourquoi les longueurs ne sont-elles pas égales (étant donné que je règle ceci)?

Je dois définir la longueur du contenu car je reçois une réponse 411 du serveur.

(En outre, dans les exemples de Sun, le deuxième argument de setRequestProperty est de type int et non Ssortingng , ce qui semble étrange.)

Vous ne devriez pas définir cet en-tête vous-même. Utilisez setFixedLengthStreamingMode() ou setChunkedTransferMode() .

De plus, n’oubliez pas d’append un setDoOutput pour indiquer à votre connexion que vous allez envoyer des données.

J’ai la même erreur avec “Content-Length” –

  URL url = new URL(targetURL); connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); connection.setRequestProperty("Content-Type", "text/plain"); connection.setRequestProperty("Authorization", authKey); connection.setRequestProperty("Content-Length", Integer.toSsortingng(requestJSON.getBytes().length)); 

Et j’en ai finalement déduit que cela se produit car l’un des champs d’object Json contient des caractères diacritiques.

  someCategory = "Ţepuşă"; try { JSONObject postData = new JSONObject(); postData.put("category", someCategory); ..... 

Voilà à quoi ressemble l’erreur:

 08-27 18:57:07.842 24263-24263/ro.nexuserp.documentecontabile E/Eror: content-length promised 491001 bytes, but received 491000