내 응용 프로그램이 일부 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] 삭제
몇 마디 만하겠습니다