gzip 응답을 처리하는 HttpClient [Java]에 대해 약간 혼란 스러움

iCodeLikeImDrunk

내 응용 프로그램이 일부 API 서비스에 http 요청을하면 해당 서비스가 gzip으로 압축 된 응답을 반환합니다. 응답이 실제로 gzip 형식인지 어떻게 확인할 수 있습니까? 요청을 한 후에 압축을 풀 필요가 없었던 이유가 혼란 스럽습니다.

아래는 내 코드입니다.

public static String streamToString(InputStream stream) {
    BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
    StringBuilder sb = new StringBuilder();
    String line;

    try {
        while ((line = reader.readLine()) != null) {
            sb.append(line).append("\n");
        }
    } catch (IOException e) {
        logger.error("Error while streaming to string: {}", e);
    } finally {
        try { stream.close(); } catch (IOException e) { }
    }

    return sb.toString();
}

public static String getResultFromHttpRequest(String url) throws IOException { // add retries, catch all exceptions
    HttpClient httpclient = new DefaultHttpClient();
    HttpGet httpGet;
    HttpResponse httpResponse;
    InputStream stream;

    try {
        httpGet = new HttpGet(url);
        httpGet.setHeader("Content-Encoding", "gzip, deflate");
        httpResponse = httpclient.execute(httpGet);
        logger.info(httpResponse.getEntity().getContentEncoding());
        logger.info(httpResponse.getEntity().getContent());
        if (httpResponse.getStatusLine().getStatusCode() == 200) {
            stream = httpResponse.getEntity().getContent();
            return streamToString(stream);
        }
    } catch (IllegalStateException e) {
        logger.error("Error while trying to access: " + url, e);
    }

    return "";
}

자동으로 압축이 풀릴 수도 있지만 적어도 그 표시를보고 싶습니다.

프라 밧 쿠마르

안녕하세요 늦었지만이 답변은 동일한 문제에 직면 한 사용자가 사용할 수 있습니다. 기본적으로 콘텐츠는 응답에서 압축 해제됩니다. 따라서 다음 코드를 사용하여 기본 압축을 비활성화해야합니다.

CloseableHttpClient client = HttpClients.custom()
    .disableContentCompression()
    .build();

HttpGet request = new HttpGet(urlSring);
request.setHeader(HttpHeaders.ACCEPT_ENCODING, "gzip");

CloseableHttpResponse response = client.execute(request, context);
HttpEntity entity = response.getEntity();
Header contentEncodingHeader = entity.getContentEncoding();

if (contentEncodingHeader != null) {
    HeaderElement[] encodings =contentEncodingHeader.getElements();
    for (int i = 0; i < encodings.length; i++) {
        if (encodings[i].getName().equalsIgnoreCase("gzip")) {
            entity = new GzipDecompressingEntity(entity);
            break;
        }
    }
}

String output = EntityUtils.toString(entity, Charset.forName("UTF-8").name());

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

장고 제네릭 뷰에 대해 약간 혼란 스러움

분류에서Dev

내 루프가 끝나지 않는 이유에 대해 약간 혼란 스러움

분류에서Dev

루핑 스레드를 처리하는 방법에 대해 혼란 스러움

분류에서Dev

계획에 정의 된 단점에 대해 약간 혼란 스러움

분류에서Dev

Rust 모듈을 사용하는 방법에 대해 혼란 스러움

분류에서Dev

Laravel 공급자 및 계약에 대해 혼란 스러움

분류에서Dev

Idris의 중간 유형에 대해 혼란 스러움

분류에서Dev

Idris의 중간 유형에 대해 혼란 스러움

분류에서Dev

PHP (5.5.38)의 간단한 전환에 대해 혼란 스러움

분류에서Dev

임베디드 리소스에 대해 혼란 스러움

분류에서Dev

나는 삼항 사용에 대해 약간 혼란 스럽습니다.

분류에서Dev

nodeJS에 대해 혼란 스러움

분류에서Dev

가치에 대해 혼란 스러움

분류에서Dev

DropDownListFor에 대해 혼란 스러움

분류에서Dev

ContentType에 대해 혼란 스러움

분류에서Dev

WindowBuilder에 대해 혼란 스러움

분류에서Dev

EKEventStatus에 대해 혼란 스러움

분류에서Dev

스프링 부트 로깅을 사용하는 방법에 대해 혼란 스러움

분류에서Dev

yash 쉘의 printf가 내장 명령인지 여부에 대해 약간 혼란 스러움

분류에서Dev

ES6-Promise의 처리 순서에 대해 혼란 스러움

분류에서Dev

파이썬의 vars에 목록 항목을 지정하는 것에 대해 혼란 스러움

분류에서Dev

for 루프 내에서 ActionLink로 ajax 호출을 수행하는 것에 대해 혼란 스러움

분류에서Dev

프로그래밍 방식으로 jtable에 열을 추가하는 방법에 대해 혼란 스러움

분류에서Dev

ASP.NET MVC에서 일부 번들을 정의하는 동안 {version}에 대해 혼란 스러움

분류에서Dev

Blazor 앱의 B2C에서 액세스 토큰을 얻는 방법에 대해 혼란 스러움

분류에서Dev

6502 간접 x 및 y의 래핑에 대해 혼란 스러움

분류에서Dev

Sap Odata와 Sapui5 간의 이름 지정에 대해 혼란 스러움

분류에서Dev

2 차원 배열로 문자열을 가져 오는 것에 대해 혼란 스러움

분류에서Dev

조각에서 YoutubePlayerView를 시작하는 것에 대해 혼란 스러움

Related 관련 기사

  1. 1

    장고 제네릭 뷰에 대해 약간 혼란 스러움

  2. 2

    내 루프가 끝나지 않는 이유에 대해 약간 혼란 스러움

  3. 3

    루핑 스레드를 처리하는 방법에 대해 혼란 스러움

  4. 4

    계획에 정의 된 단점에 대해 약간 혼란 스러움

  5. 5

    Rust 모듈을 사용하는 방법에 대해 혼란 스러움

  6. 6

    Laravel 공급자 및 계약에 대해 혼란 스러움

  7. 7

    Idris의 중간 유형에 대해 혼란 스러움

  8. 8

    Idris의 중간 유형에 대해 혼란 스러움

  9. 9

    PHP (5.5.38)의 간단한 전환에 대해 혼란 스러움

  10. 10

    임베디드 리소스에 대해 혼란 스러움

  11. 11

    나는 삼항 사용에 대해 약간 혼란 스럽습니다.

  12. 12

    nodeJS에 대해 혼란 스러움

  13. 13

    가치에 대해 혼란 스러움

  14. 14

    DropDownListFor에 대해 혼란 스러움

  15. 15

    ContentType에 대해 혼란 스러움

  16. 16

    WindowBuilder에 대해 혼란 스러움

  17. 17

    EKEventStatus에 대해 혼란 스러움

  18. 18

    스프링 부트 로깅을 사용하는 방법에 대해 혼란 스러움

  19. 19

    yash 쉘의 printf가 내장 명령인지 여부에 대해 약간 혼란 스러움

  20. 20

    ES6-Promise의 처리 순서에 대해 혼란 스러움

  21. 21

    파이썬의 vars에 목록 항목을 지정하는 것에 대해 혼란 스러움

  22. 22

    for 루프 내에서 ActionLink로 ajax 호출을 수행하는 것에 대해 혼란 스러움

  23. 23

    프로그래밍 방식으로 jtable에 열을 추가하는 방법에 대해 혼란 스러움

  24. 24

    ASP.NET MVC에서 일부 번들을 정의하는 동안 {version}에 대해 혼란 스러움

  25. 25

    Blazor 앱의 B2C에서 액세스 토큰을 얻는 방법에 대해 혼란 스러움

  26. 26

    6502 간접 x 및 y의 래핑에 대해 혼란 스러움

  27. 27

    Sap Odata와 Sapui5 간의 이름 지정에 대해 혼란 스러움

  28. 28

    2 차원 배열로 문자열을 가져 오는 것에 대해 혼란 스러움

  29. 29

    조각에서 YoutubePlayerView를 시작하는 것에 대해 혼란 스러움

뜨겁다태그

보관