I'm setting the length of the content in my HttpURLConnection, for a PUT.
urlConnection.setRequestProperty("Content-Length", "" + responseJSONArray.toString(2).getBytes("UTF8").length);
The actual number of bytes is 74. However, when I query the content length of urlConnection
I'm returned -1
. Why is that? And why are lengths not equal (given that I set this)?
I must set the content-length because I'm receiving a 411
response from the server.
(Also, in the Sun examples I've seen the second argument of setRequestProperty
is of type int
and not String
, which seems odd.)
You shouldn't set this header yourself. Use setFixedLengthStreamingMode()
or setChunkedTransferMode()
.
Also do not forget to add a setDoOutput to tell your connection you are going to send data.
I get same error with "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.toString(requestJSON.getBytes().length));
And I finally deduced that it happens because one of the Json object fields contains diacritical characters.
someCategory = "Ţepuşă";
try {
JSONObject postData = new JSONObject();
postData.put("category", someCategory);
.....
That's what the error looks like:
08-27 18:57:07.842 24263-24263/ro.nexuserp.documentecontabile E/Eror: content-length promised 491001 bytes, but received 491000
来源:https://stackoverflow.com/questions/7062349/java-httpurlconnection-and-setting-the-content-length