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();