생각자유의 안드로이드 이야기

Http Body Encording에 대해서 본문

JAVA

Http Body Encording에 대해서

생각자유 2015. 9. 7. 15:49
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

오늘 Http라이브러리(HttpsURLConnection)를 이용하여 Http데이터를 받아오는걸 구현하고 있었는데


특정 사이트에 경우 body가 이상한 값으로 계속 보이는것이다. 


그래서 하루쯤 고생하다 혹시 몰라 Http Response Header를 다 찍어보니 세상에나..


Content-Encoding=[gzip]

이렇게 되어있는것이다. 즉시 2가지 로직을 짜서 테스트를 해봤따.


Http Request를 할떄 


"Accept-Encoding", "gzip, deflate"

보통 위에처럼 header를 추가해서 보내는데 저부분을 주석처리해서 보내는거랑


gzip이 왔을때. 

GZIPInputStream gzipInputStream = new GZIPInputStream(is);
BufferedInputStream bufferedInputStream = new BufferedInputStream(gzipInputStream);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

byte[] buffer = new byte[100];

int length;
while ((length = bufferedInputStream.read(buffer)) > 0) {
byteArrayOutputStream.write(buffer, 0, length);
}

요렇게 파싱하는거 2가지를 다 해보니 잘 된다..


 {"resultCode":"SUCCESS","resultMsg":"정상적으로 처리 되었습니다."


결국은 압축인데 이게 모바일이때랑 웹이때랑 조금 다르게 나오는거 같다. 결국 프로그래밍의 기초인 Type구분을 잘 확인하고 파싱하는게 필요하다(예외처리)


참고로

헤더 정보를 보고 싶으면

for (Map.Entry<String, List<String>> k : httpsURLConnection.getHeaderFields().entrySet()) {
System.out.println(k.toString());
}

해주면 끝

'JAVA' 카테고리의 다른 글

Java 정렬에 대해서  (0) 2015.08.20
Comments