[GET 동기]
public void get(String requestURL) {
try {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.addHeader("x-api-key", RestTestCommon.API_KEY)
.url(requestURL)
.build(); //GET Request
//동기 처리시 execute함수 사용
Response response = client.newCall(request).execute();
//출력
String message = response.body().string();
System.out.println(message);
} catch (Exception e){
System.err.println(e.toString());
}
}
[GET 비동기]
public void get(String requestURL) {
try {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.addHeader("x-api-key", RestTestCommon.API_KEY)
.url(requestURL)
.build();
//비동기 처리 (enqueue 사용)
client.newCall(request).enqueue(new Callback() {
//비동기 처리를 위해 Callback 구현
@Override
public void onFailure(Call call, IOException e) {
System.out.println("error + Connect Server Error is " + e.toString());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
System.out.println("Response Body is " + response.body().string());
}
});
} catch (Exception e){
System.err.println(e.toString());
}
}
[POST 동기]
public void post(String requestURL, String jsonMessage) {
try{
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.addHeader("x-api-key", RestTestCommon.API_KEY)
.url(requestURL)
.post(RequestBody.create(MediaType.parse("application/json"), jsonMessage))
//POST로 전달할 내용 설정
.build();
//동기 처리시 execute함수 사용
Response response = client.newCall(request).execute();
//출력
String message = response.body().string();
System.out.println(message);
} catch (Exception e) {
System.err.println(e.toString());
}
}
[POST 비동기]
public void post(String requestURL, String message) {
try{
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.addHeader("x-api-key", RestTestCommon.API_KEY)
.url(requestURL)
.post(RequestBody.create(MediaType.parse("application/json"), message))
.build();
//비동기 처리 (enqueue 사용)
client.newCall(request).enqueue(new Callback() {
//비동기 처리를 위해 Callback 구현
@Override
public void onFailure(Call call, IOException e) {
System.out.println("error + Connect Server Error is " + e.toString());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
System.out.println("Response Body is " + response.body().string());
}
});
} catch (Exception e) {
System.err.println(e.toString());
}
}
// 동기 처리를 하고자 한다면 execute를 사용하면 되고 비동기 처리를 원한다면 enqueue를 사용하면 된다.
HttpURLConnection과 HttpClient에 비해 상당히 직관적이고 사용하기도 편리하다. 동기와 비동기 처리를 아주 쉽게 할 수 있다는 점이 인상적이다
[OkHttp 장점]
1. Interceptor 처리하는 것이 편하다.
3. Retofit은 OkHttp위에서 돈다.