문제는 대부분의 국내 기업형 문자 서비스 및 결제 등의 서비스 구현 예제가 과거 HttpClient 기반으로 되어 있어 실 개발에 적용하는 것에 있어 여러가지 불편함이 있다는 것이다.
실재로 근래 프로젝트 진행에 있어 서비스 업체에서 제공하는 예제가 모두 과거 HttpClient 코드로 되어 있어 이를 다시 최신 버전으로 개발하여 적용하고 있다. (코딩이 어려운 것이 아니기 때문에 업체에서 최신 코드를 적용하여 예제를 만들어 주었으면 하는 바램이 있다.)
1. Maven 에서 Apache HttpComponents 사용하기
pom.xml 파일의 dependencies 항목에 아래와 같이 추가한다.org.apache.httpcomponents httpclient 4.5.2
2. 자바에서 HTTP POST 통신하기
간단하게 서버 사이드에서 특정 URL 로 POST방식으로 통신하는 것을 구현하여 보자. 사실 과거 버전과 비교하면 엄청 간단해졌다. 또한 내부적으로 HTTP 통신에 있어 성능 개선을 위하여 POOL 기술을 사용하고 있다.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.http.HttpException; import org.apache.http.NameValuePair; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.message.BasicNameValuePair; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class HttpUtil { private static final String DEFAULT_ENCODING = "euc-kr"; private static final Logger log = LoggerFactory.getLogger(HttpUtil.class); public HttpUtil() { } public String processHTTP(Map<String, String> params , String url ) throws Exception { int statusCode = 0; CloseableHttpClient httpclient = HttpClientBuilder.create().build(); HttpPost httpPost = new HttpPost(url); List<NameValuePair> nvps = makeParams(params); try { httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded; text/html; charset=euc-kr"); httpPost.setHeader("Cache-Control", "no-cache"); // 한글 인코딩을 위하여 인코딩 정보를 설정한다. httpPost.setEntity(new UrlEncodedFormEntity(nvps, DEFAULT_ENCODING)); CloseableHttpResponse response = httpclient.execute(httpPost); statusCode = response.getStatusLine().getStatusCode(); log.debug("\nSending 'POST' request to URL : " + httpPost.getURI()); log.debug("Post parameters : " + httpPost.getEntity().toString()); log.debug("Response Code : " + statusCode ); if( statusCode == 200){ // 정상인 경우 메시지를 읽어 들여 그 결과를 리턴한다. BufferedReader rd = new BufferedReader( new InputStreamReader(response.getEntity().getContent())); StringBuffer result = new StringBuffer(); String line = ""; while ((line = rd.readLine()) != null) { result.append(line); } return result.toString(); } } catch (Throwable e) { throw new HttpException((new StringBuilder("오류가 발생하였습니다.")).append(statusCode).toString()); } if( statusCode != 200) { throw new HttpException((new StringBuilder("오류가 발생하였습니다.")).append(statusCode).toString()); } } public List<NameValuePair> makeParams(Map<String String> params) throws Exception { int hashSize = params.size(); Iterator keyset = params.keySet().iterator(); List <NameValuePair> nvps = new ArrayList <NameValuePair>(); for (int i = 0; i < hashSize; i++) { String key = (String) keyset.next(); nvps.add(new BasicNameValuePair(key, params.get(key))); } return nvps; } } | cs |
import org.apache.http. 시 에러가 나는데요..
답글삭제import org.apache.http. 임포트는 어떻게 시키는지요?
Maven 을 사용하고 있다면 본문과 같이 라이브러리를 추가해주거나 직접 라이브러리를 다운로드하여 사용하면 됩니다.
답글삭제https://hc.apache.org/downloads.cgi