2012-09-18 7 views
1

Http Client 3.x 라이브러리의 일부 코드를 Http Components 4.x 라이브러리로 변환 중입니다. 이전 코드에는 응답이 특정 크기를 넘지 않았는지 확인하는 체크가 포함되어 있습니다. 이것은 getResponseBodyAsStream() 메소드를 사용하여 응답으로부터 스트림을 되 찾을 수 있고 크기가 초과되었을 때를 결정할 수 있기 때문에 Http Client 3.x에서 상당히 쉽습니다. HTTP 구성 요소에서 비슷한 방법을 찾을 수 없습니다.아파치 HttpComponents를 사용할 때의 응답 크기 제한

여기에 내가 할 노력하고있어의 예를 들어 이전 코드는 다음과 같습니다

private static final long RESPONSE_SIZE_LIMIT = 1024 * 1024 * 10; 
private static final int READ_BUFFER_SIZE = 16384; 

private static ByteArrayOutputStream readResponseBody(HttpMethodBase method) 
     throws IOException { 

    int len; 
    byte buff[] = new byte[READ_BUFFER_SIZE]; 
    ByteArrayOutputStream out = null; 
    InputStream in = null; 
    long byteCount = 0; 

    in = method.getResponseBodyAsStream(); 

    out = new ByteArrayOutputStream(READ_BUFFER_SIZE); 

    while ((len = in.read(buff)) != -1 && byteCount <= RESPONSE_SIZE_LIMIT) { 
     byteCount += len; 
     out.write(buff, 0, len); 
    } 

    if (byteCount >= RESPONSE_SIZE_LIMIT) { 
     throw new IOException(
       "Size limited exceeded reading from HTTP input stream"); 
    } 

    return (out); 

} 
+0

HttpEntity.getContent()를 보았습니까? –

+0

그 덕분에, 고마워! – acvcu

+0

다른 사람들이 쉽게 찾을 수 있도록 답변으로 추가하겠습니다. –

답변

1

당신은 자신을 읽기 위해 의 InputStream를 얻을 수 HttpEntity.getContent()를 사용할 수 있습니다.