diff --git a/src/main/java/cokr/xit/foundation/web/Http.java b/src/main/java/cokr/xit/foundation/web/Http.java index 36ebb1e..39fd0c1 100644 --- a/src/main/java/cokr/xit/foundation/web/Http.java +++ b/src/main/java/cokr/xit/foundation/web/Http.java @@ -17,8 +17,8 @@ import cokr.xit.foundation.AbstractComponent; /**Http 통신 유틸리티 *

다음은 사용례이다. *

 new Http().get(
- *     "https://...",
  *     new Http.Conf()
+ *         .url("https://...")
  * //      .header("Content-Type", "application/x-www-form-urlencoded")
  *         .param("param0", "value0")
  *         .param("param1", "value1")
@@ -27,6 +27,8 @@ import cokr.xit.foundation.AbstractComponent;
  * @author mjkhan
  */
 public class Http extends AbstractComponent {
+	public static final String FORM = "application/x-www-form-urlencoded";
+	public static final String JSON = "application/json";
 	/**http 통신 시 설정하는 옵션
 	 * @author mjkhan
 	 */
@@ -43,12 +45,12 @@ public class Http extends AbstractComponent {
 		/**파라미터 인코딩에 사용하는 문자셋의 이름을 반환한다.
 		 * @return 파라미터 인코딩에 사용하는 문자셋의 이름
 		 */
-		protected String charset() {
+		private String charset() {
 			return ifEmpty(charset, () -> "UTF-8");
 		}
 
 		/**파라미터 인코딩에 사용하는 문자셋의 이름을 설정한다.
-		 * @param charset 파라미터 인코딩에 사용하는 문자셋의 이름
+		 * @param charset 파라미터 인코딩에 사용하는 문자셋의 이름. 디폴트는 UTF-8.
 		 * @return 현재 Conf
 		 */
 		public Conf charset(String charset) {
@@ -60,21 +62,30 @@ public class Http extends AbstractComponent {
 		 * @return URL
 		 * @throws Exception
 		 */
-		protected URL url() throws Exception {
-			return new URL(url);
+		private URL url() throws Exception {
+			return new URL(notEmpty(url, "url"));
 		}
 
-		/**http 연결 방법을 반환한다. 디폴트는 "GET"
-		 * @return http 연결 방법
+		/**http로 접속할 url을 설정한다.
+		 * @param url url
+		 * @return Conf
 		 */
-		protected String method() {
+		public Conf url(String url) {
+			this.url = url;
+			return this;
+		}
+
+		/**http 연결 방법을 반환한다.
+		 * @return http 연결 방법. 디폴트는 "GET"
+		 */
+		private String method() {
 			return ifEmpty(method, "GET");
 		}
 
 		/**설정한 파라미터 이름과 값들을 인코딩하여 반환한다.
 		 * @return 인코딩한 파라미터 이름과 값
 		 */
-		protected String params() {
+		private String params() {
 			return !isEmpty(params) ? params.entrySet().stream().map(this::encode).collect(Collectors.joining("&")) : "";
 		}
 
@@ -82,7 +93,7 @@ public class Http extends AbstractComponent {
 		 * @param entry 맵 엔트리
 		 * @return 인코딩한 맵 엔트리
 		 */
-		protected String encode(Map.Entry entry) {
+		private String encode(Map.Entry entry) {
 			try {
 				return URLEncoder.encode(entry.getKey(), charset()) + "=" + URLEncoder.encode(entry.getValue(), charset());
 			} catch (Exception e) {
@@ -117,7 +128,7 @@ public class Http extends AbstractComponent {
 		/**설정한 헤더들을 http에 설정한다.
 		 * @param http HttpURLConnection
 		 */
-		protected void setHeaders(HttpURLConnection http) {
+		private void setHeaders(HttpURLConnection http) {
 			if (isEmpty(headers)) return;
 
 			headers.forEach(http::setRequestProperty);
@@ -126,7 +137,7 @@ public class Http extends AbstractComponent {
 		/**http 접속 시 타임아웃을 반환한다. 디폴트는 10000
 		 * @return http 접속 시 타임아웃
 		 */
-		protected int timeout() {
+		private int timeout() {
 			return Math.max(timeout, 10000);
 		}
 
@@ -187,35 +198,32 @@ public class Http extends AbstractComponent {
 	}
 
 	/**지정한 url로 GET 요청을 한다.
-	 * @param url url
 	 * @param conf 요청 시 설정할 옵션
 	 */
-	public void get(String url, Conf conf) {
+	public void get(Conf conf) {
 		if (conf == null)
 			conf = new Conf();
 		conf.method = "GET";
-		request(url, conf);
+		request(conf);
 	}
 
 	/**지정한 url로 POST 요청을 한다.
-	 * @param url url
 	 * @param conf 요청 시 설정할 옵션
 	 */
-	public void post(String url, Conf conf) {
+	public void post(Conf conf) {
 		if (conf == null)
 			conf = new Conf();
 		conf.method = "POST";
-		request(url, conf);
+		request(conf);
 	}
 
 	/**지정한 url로 요청을 보내고, 이 때 conf를 옵션으로 설정한다.
 	 * @param url url
 	 * @param conf 요청 시 설정할 옵션
 	 */
-	protected void request(String url, Conf conf) {
+	private void request(Conf conf) {
 		HttpURLConnection http = null;
 		try {
-			conf.url = url;
 			http = (HttpURLConnection)conf.url().openConnection();
 			http.setRequestMethod(conf.method());
 			http.setUseCaches(false);
@@ -243,15 +251,15 @@ public class Http extends AbstractComponent {
 	 * @param http HttpURLConnection
 	 * @throws Exception
 	 */
-	protected void setParams(Conf conf, HttpURLConnection http) throws Exception {
+	private void setParams(Conf conf, HttpURLConnection http) throws Exception {
 		String params = conf.params();
-		if (!isEmpty(params)) {
-			http.setDoOutput(true);
-			DataOutputStream out = new DataOutputStream(http.getOutputStream());
-			out.writeBytes(params);
-			out.flush();
-			out.close();
-		}
+		if (isEmpty(params)) return;
+
+		http.setDoOutput(true);
+		DataOutputStream out = new DataOutputStream(http.getOutputStream());
+		out.writeBytes(params);
+		out.flush();
+		out.close();
 	}
 
 	/**http 요청의 응답을 추출한다.
@@ -259,7 +267,7 @@ public class Http extends AbstractComponent {
 	 * @return http 요청의 응답
 	 * @throws Exception
 	 */
-	protected Response getResponse(HttpURLConnection http) throws Exception {
+	private Response getResponse(HttpURLConnection http) throws Exception {
 		Response resp = new Response();
 		resp.status = http.getResponseCode();
 
@@ -284,7 +292,7 @@ public class Http extends AbstractComponent {
 	 * @param t Throwable
 	 * @return http 요청 중 오류가 발생했을 때 응답
 	 */
-	protected Response getResponse(Throwable t) {
+	private Response getResponse(Throwable t) {
 		Response resp = new Response();
 		resp.status = 500;
 		resp.response = rootCause(t).getMessage();