2011-08-15 34 views
12

Tôi đang đặt độ dài của nội dung trong HttpURLConnection của tôi, cho một PUT.Java, HttpURLConnection và thiết lập độ dài nội dung

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

Các con số thực tế của byte là 74. Tuy nhiên, khi tôi truy vấn chiều dài nội dung của urlConnection Tôi được đưa trở -1. Tại sao vậy? Và tại sao chiều dài không bằng nhau (cho rằng tôi thiết lập này)?

Tôi phải đặt độ dài nội dung vì tôi nhận được phản hồi 411 từ máy chủ.

(Ngoài ra, trong Sun examples Tôi đã nhìn thấy đối số thứ hai của setRequestProperty là loại int và không String, mà dường như lẻ.)

+0

Tôi đã trả lời câu hỏi này và bây giờ tôi nhận ra rằng nó có thẻ android. Tôi không biết Google đã triển khai 'HttpURLConnection' như thế nào. –

+0

@ The Elite Gentleman họ sẽ phải đồng ý với đặc điểm kỹ thuật Javadoc hiện có, và những hiểu lầm của bạn không liên quan gì đến các thay đổi có thể xảy ra giữa các triển khai. – EJP

Trả lời

19

Bạn không nên đặt tiêu đề này cho mình. Sử dụng setFixedLengthStreamingMode() hoặc setChunkedTransferMode().

+0

Cảm ơn. Tôi vẫn không hiểu điều gì đó: Tôi hiện đang làm 'urlConnection.setFixedLengthStreamingMode (responseJSONArray.toString (2) .getBytes (" UTF8 "). Length);'. Chiều dài cơ thể là '74' byte, tuy nhiên khi tôi gọi 'Log.v (" app "," "+ urlConnection.getContentLength());' I see '-1'. Tại sao vậy? – SK9

+1

@ SK9 là độ dài của * phản hồi. * – EJP

+0

Cảm ơn. Điều đó dường như không cần thiết mơ hồ với tôi! – SK9

2

Cũng đừng quên thêm setDoOutput để cho kết nối của bạn biết bạn sẽ gửi dữ liệu.

+0

Cảm ơn. Tôi đã sáng (với 'urlConnection.setDoOutput (true);'). – SK9

+0

Nó phải đúng là -1, vì bạn đang gửi dữ liệu không nhận được một số từ máy chủ. getContentLenght(): "Trả về độ dài nội dung theo byte được chỉ định bởi độ dài nội dung của trường tiêu đề phản hồi hoặc -1 nếu trường này không được đặt." Từ [Android Javadoc cho HttpURLConnection] (http://developer.android.com/reference/java/net/HttpURLConnection.html) –

+1

Hmm - Tôi nghĩ trường độ dài nội dung đã chỉ định độ dài byte của yêu cầu HTTP mà tôi đã chuẩn bị. – SK9

Các vấn đề liên quan