2011-08-15 3 views
12

PUT에 대해 내 HttpURLConnection에서 콘텐츠의 길이를 설정하고 있습니다. 내가 urlConnection의 콘텐츠 길이 내가 -1을 반환하고있어 쿼리 할 때Java, HttpURLConnection 및 콘텐츠 길이 설정

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

바이트의 실제 수는, 그러나 (74)이다. 왜 그런가요? 왜 길이가 같지 않은지 (내가 이것을 정하면)?

서버에서 411 응답을 받기 때문에 컨텐츠 길이를 설정해야합니다.

은 (또한, 일 examples에 나는 setRequestProperty의 두 번째 인수가 홀수 보인다하지 String 유형 int이며 본 적이있다.)

+0

나는이 질문에 답했으며, 이제는 안드로이드 태그가 있다는 것을 알았습니다. 나는 구글이'HttpURLConnection'을 어떻게 구현했는지 전혀 모른다. –

+0

@ Elite Gentleman은 기존의 Javadoc 사양에 동의해야했고, 사용자의 오해는 구현 간의 가능한 변형과 ​​관련이 없었습니다. – EJP

답변

19

당신은이 헤더를 직접 설정하지 않아야합니다. setFixedLengthStreamingMode() 또는 setChunkedTransferMode()을 사용하십시오.

+0

감사합니다. 나는 아직도 뭔가를 이해하지 못한다 : 나는 지금 urlConnection.setFixedLengthStreamingMode (responseJSONArray.toString (2) .getBytes ("UTF8"). length);'를하고있다. body-length는'74' 바이트이지만'Log.v ("app", "+ urlConnection.getContentLength());를 호출하면'-1'이 표시됩니다. 왜 그런가요? – SK9

+1

@ SK9 길이 * 응답의 * – EJP

+0

고마워. 그건 나에게 불필요하게 모호한 것처럼 보인다! – SK9

2

setDoOutput을 추가하여 데이터를 보내려는 연결을 알리는 것도 잊지 마십시오.

+0

감사합니다. 나는 이미 ('urlConnection.setDoOutput (true);'). – SK9

+0

서버에서 데이터를 가져 오지 못하는 데이터를 보내고 있기 때문에 정상적으로 -1이어야합니다. getContentLenght() : "응답 헤더 필드 content-length로 지정된 바이트로 내용 길이를 반환하거나이 필드가 설정되어 있지 않으면 -1을 반환합니다." [Android Javadoc for HttpURLConnection] (http://developer.android.com/reference/java/net/HttpURLConnection.html) –

+1

흠 - 콘텐츠 길이 필드가 내가 요청한 HTTP 요청의 바이트 길이를 지정했다고 생각했습니다. 준비. – SK9

관련 문제