sitelink1 | https://developer.mozilla.org/en-US/docs...t-Encoding |
---|---|
sitelink2 | http://mikelim.mintocean.com/8 |
sitelink3 | |
sitelink4 | |
sitelink5 | |
sitelink6 |
HTTP 연결시 Request header에 Accept-Encoding = gzip 또는 deflate 로 지정이 되었을 경우(Accept-Encoding="gzip, deflate")
서버에서는 트래픽 양을 줄이기 위하여 컨텐츠를 모두 압축하여 보내준다.
물론 서버 설정에서 gzip으르 지원하지 않도록 설정을 바꿀 수 있지만 그렇게 되면 트래픽이 과도하게 발생된다.
어쨌건간에 Http로 연결을 한 후 gzip으로 인코딩이 되었다면 Java에서 GZIPInputStream 으로 간단히 해결 할 수 있다.
URL url = new URL("http://[도메인]/[서비스경로]");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.setRequestProperty("Host", "tops.tobesoft.com");
connection.setRequestProperty("X-Requested-With", "XMLHttpRequest");
connection.setRequestProperty("Referer", "http://[도메인]/[서비스경로]/[서비스페이지]");
connection.setRequestProperty("Accept", "application/xml, text/xml, */*");
connection.setRequestProperty("Accept-Encoding", "gzip, deflate"); //이 코드가 들어가면 서버는 응답데이터를 압축해서 보내준다
connection.setRequestProperty("Content-type", "text/xml;charset=UTF-8");
connection.setRequestProperty("Pragma", "no-cache");
connection.setRequestMethod("POST");
connection.setDoOutput(true);
OutputStream out_stream = connection.getOutputStream();
out_stream.write( trData.getBytes("UTF-8") );
out_stream.flush();
out_stream.close();
connection.connect();
String sessCookie = connection.getHeaderField("Set-Cookie");
if (sessCookie != null) {
System.out.println("쿠키:"+sessCookie);
}
BufferedReader brin = null;
String cEncode = connection.getHeaderField("Content-Encoding");
if (cEncode != null &&
(cEncode.toLowerCase().indexOf("gzip") > -1
|| cEncode.toLowerCase().indexOf("deflate") > -1
|| cEncode.toLowerCase().indexOf("compress") > -1)) {
brin = new BufferedReader(new InputStreamReader(new GZIPInputStream(connection.getInputStream())));
} else {
brin = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
}
String resStr = null;
StringBuffer resStrBuff = new StringBuffer();
try {
while ((resStr = brin.readLine()) != null) {
resStrBuff.append(resStr);
}
} finally {
if (brin != null) {
brin.close();
brin = null;
}
connection = null;
url = null;
resStr = null;
}