Java,HttpURLConnection和设置内容长度

时间:2011-08-15 06:51:16

标签: java android httpurlconnection content-length

我在HttpURLConnection中为PUT设置内容的长度。

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

实际的字节数是74.但是,当我查询urlConnection的内容长度时,我返回-1。这是为什么?为什么长度不相等(假设我设定了这个)?

我必须设置内容长度,因为我从服务器收到411响应。

(另外,在太阳examples我看到setRequestProperty的第二个参数属于int而不是String,这似乎很奇怪。)

3 个答案:

答案 0 :(得分:20)

您不应自行设置此标题。使用setFixedLengthStreamingMode()setChunkedTransferMode()

答案 1 :(得分:2)

另外,请不要忘记添加setDoOutput来告诉您要发送数据的连接。

答案 2 :(得分:0)

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

最后我推断出发生这种情况是因为Json对象字段之一包含变音字符。

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

这就是错误的样子:

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