2013-05-09 2 views
1

전송 인코딩이 청크로 처리되는 경우 HTTP 응답 청크의 크기를 알 수있는 방법. 논리를 가져올 수 없습니다. 제발 나를 도와주세요. 그리고 청크의 크기를 얻기 위해 몇 가지 샘플 자바 코드를 제공합니다. 각 청크의 크기가 청크 자체 앞에 지정되어있는 책을 읽었습니다. 그러나 어떤 논리를 사용하면 얻을 수 있습니까? Java를 사용하여 도와주세요.전송 인코딩이 청크 일 경우 java를 사용하여 HTTP 응답에서 청크 크기를 얻는 방법

감사합니다.

답변

4

코드를 사용할 준비가되어 있지 않지만 Apache HttpClient 라이브러리는 "모든 것"을 즉시 사용할 수 있도록 지원합니다.

이것은 청크 응답의 위키 피 디아 예제입니다. 본문 부분을 읽을 때까지 정확한 바이트 크기를 알 수 없습니다. 각 청크의 크기는 16 진수 값이며 마지막 0 크기의 청크는 데이터의 끝임을 유의하십시오. 그것도 2 바이트 CRLF 구분 기호에 의해 종료됩니다.

Transfer-Encoding: chunked\r\n 
Content-Type: text/plain\r\n 
\r\n 
4\r\n 
Wiki\r\n 
5;extkey=extvalue\r\n 
pedia\r\n 
E\r\n 
.in\r\n 
\r\n 
chunks.\r\n 
0\r\n 
AfterBodyHeader: some value\r\n 
AfterBodyHeader2: any value\r\n 
\r\n 
  • 판독 바이트 CRLF (헥스 \ r에 \ n 또는 0D0A)까지
  • 모두 삭제 한 후; 구분 기호 또는 후행 CRLF에서 중지 할 경우 일부 응답은 청크 크기 줄에 확장을 추가 할 수 있습니다. 알려진 키 - 값 쌍을 기다리지 않으면 무시하십시오. 0이 아닌 다시 크기를 읽을으로 크기 경우
  • 변환 진수는
  • 그것을 청크에서 데이터 바이트의 바이트
  • 읽기 X 인분을 당신 납입을 알려줍니다, 정수 및 ByteArrayOutputBuffer
  • 에 추가 읽기 CRLF 구분 기호 바이트를 후행하고 무시 + 청크 데이터
  • 일부 반응은 0 크기의 덩어리 빈 줄 (\ 연구 \ n을) 후 완전한 HTTP 응답의 끝을 나타내는 AfterHeaders
  • 응답
  • 의 시작 헤더처럼을 추가 할 수 있습니다. AfterHeaders이 없으면 끝에 0 \ r \ n \ r \ n 바이트가 표시되어야합니다. 일반 청크에는 빈 줄이 포함될 수 있으므로 0 크기 표시기가 나타날 때까지 구문 분석을 종료하지 마십시오.

'(스펙

+0

감사가 필요 you..but I 한 페이지의 해당 수 chunk_size = INT (line.strip(). 스플릿 발견이 예에서는 2 바이트 분리를 나타내는 \ 연구 \ n 자리를 사용 [0], 16) 나는이 줄을 이해하지 못했다. 그들은 덩어리 크기를 찾기 위해이 논리를 부여했다. 그러나 [0] 색인은 무엇이며 왜 16이 놓여 졌는가. 나는이 문장을 이해하지 못했다. 나를. – user2365917

+0

"5; extkey = extvalue".split (;)은 [0] = "5", [1] = "extkey = extvalue"의 두 요소의 배열을 제공합니다. int (arr [0], 16)는 첫 번째 문자열 요소를 정수 값으로 변환합니다. 청크의 크기는 16 진수이므로 16의 표시기입니다. 선에 확장 (;)이없는 경우 split은 한 크기의 배열을 반환하고 strToInteger 변환 여전히 작동합니다. – Whome

+0

위의 논리 즉, int (arr [0], 16)는 직접적으로 청크 크기를 바이트로 나타냅니다. 정확하게 맞습니까? – user2365917

관련 문제