아파치의 httpcomponenet를 활용하여 http 통신 테스트를 해본다.
그러기 위해서는 pom.xml에 아래를 추가한다.
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.4</version>
</dependency>
그뒤 패키지를 만들고 그 안에 void 자바파일을 하나 만든다.
패키지명: com.test.httpConnection01
파일명: HttpConnectionTest01.java
package com.test.httpConnection01;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
public class HttpConnectionTest01 {
private static final String USER_AGENT = "Mozila/5.0";
private static final String GET_URL = "http://www.google.com";
public static void sendGet() throws ClientProtocolException, IOException {
//http client 생성
CloseableHttpClient httpClient = HttpClients.createDefault();
//get 메서드와 URL 설정
HttpGet httpGet = new HttpGet(GET_URL);
//agent 정보 설정
httpGet.addHeader("User-Agent", USER_AGENT);
//get 요청
CloseableHttpResponse httpResponse = httpClient.execute(httpGet);
System.out.println("::GET Response Status::");
//response의 status 코드 출력
System.out.println("status code: "+httpResponse.getStatusLine().getStatusCode());
BufferedReader reader = new BufferedReader(new InputStreamReader(
httpResponse.getEntity().getContent()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = reader.readLine()) != null) {
response.append(inputLine);
}
reader.close();
//Print result
System.out.println(response.toString());
httpClient.close();
}
}
그리고 위 메소드를 실행할 파일을 하나 만든다.
파일명: HttpConnectionTextExec.java
package com.test.httpConnection01;
import java.io.IOException;
import org.apache.http.client.ClientProtocolException;
public class HttpConnectionTextExec {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
//예제1 connection 테스트
HttpConnectionTest01.sendGet();
//System.out.println("==============비트코인 가격 json 시작=================");
//예제2 비트코인가격 Json
//HttpConnectionTest02.sendGet();
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
코드를 완성 한 후 실행하면 아래와 같은 결과를 얻는다.
::GET Response Status::
status code: 200
<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage"
그런데 json을 받아오는 경우가 많으므로 json 예제파일을 하나 더 만들어보자.
파일명: HttpConnectionTest02
package com.test.httpConnection01;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
public class HttpConnectionTest02 {
private static final String USER_AGENT = "Mozila/5.0";
//비트코인 가격 json API 주소
private static final String GET_URL = "https://api.blockchain.com/v3/exchange/tickers/"+
"BTC-USD";
public static void sendGet() throws ClientProtocolException, IOException {
//http client 생성
CloseableHttpClient httpClient = HttpClients.createDefault();
//get 메서드와 URL 설정
HttpGet httpGet = new HttpGet(GET_URL);
//agent 정보 설정
httpGet.addHeader("User-Agent", USER_AGENT);
httpGet.addHeader("Content-type", "application/json");
//get 요청
CloseableHttpResponse httpResponse = httpClient.execute(httpGet);
System.out.println("status code: "+httpResponse.getStatusLine().getStatusCode());
String json = EntityUtils.toString(httpResponse.getEntity(), "UTF-8");
System.out.println(json);
httpClient.close();
}
}
그리고 실행 파일에서 예제1에 주석을 걸고, 예제2 비트코인 가격 부분 주석을 푼다.
package com.test.httpConnection01;
import java.io.IOException;
import org.apache.http.client.ClientProtocolException;
public class HttpConnectionTextExec {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
//예제1 connection 테스트
//HttpConnectionTest01.sendGet();
System.out.println("==============비트코인 가격 json 시작=================");
//예제2 비트코인 가격
HttpConnectionTest02.sendGet();
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
그러면 결과값은 아래와 같다.
==============비트코인 가격 json 시작=================
status code: 200
{"symbol":"BTC-USD","price_24h":35775.7,"volume_24h":63.66743294,"last_trade_price":35717.4}
더나아가서 비트코인 가격만 나타나려고 하면 json으로 그 값을 저장하는 변수를 추가해줘야한다.
pom.xml에 아래와 같이 GSON 메이븐을 추가해준다. (json-simple이 아닌 gson이다.)
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.1</version>
</dependency>
그뒤 비트코인 가격 클래스에 json parsing 코드를 넣는다.
package com.test.httpConnection01;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
public class HttpConnectionTest02 {
private static final String USER_AGENT = "Mozila/5.0";
/* private static final String GET_URL = "https://blockchain.info/ko"
+ "/rawblock/0000000000000bae09a7a393a8acd"
+ "ed75aa67e46cb81f7acaa5ad94f9eacd103";*/
//비트코인 가격 json API 주소
private static final String GET_URL = "https://api.blockchain.com/v3/exchange/tickers/"+
"BTC-USD";
public static void sendGet() throws ClientProtocolException, IOException {
//http client 생성
CloseableHttpClient httpClient = HttpClients.createDefault();
//get 메서드와 URL 설정
HttpGet httpGet = new HttpGet(GET_URL);
//agent 정보 설정
httpGet.addHeader("User-Agent", USER_AGENT);
httpGet.addHeader("Content-type", "application/json");
//get 요청
CloseableHttpResponse httpResponse = httpClient.execute(httpGet);
System.out.println("status code: "+httpResponse.getStatusLine().getStatusCode());
String json = EntityUtils.toString(httpResponse.getEntity(), "UTF-8");
String sdsd="dsd";
System.out.println(json);
//Json parsing 추가
JsonParser jsonParser= new JsonParser(); //JsonParser를 불러온다.
JsonObject jsonObj= (JsonObject) jsonParser.parse(json); //json을 오브젝트 형식으로 파싱함
JsonElement last_trade_price = jsonObj.get("last_trade_price");
System.out.println("비트코인 가격: "+last_trade_price);
httpClient.close();
}
}
그 뒤 실행 파일에서 실행해보면 결과는 아래와 같다.
==============비트코인 가격 json 시작=================
status code: 200
{"symbol":"BTC-USD","price_24h":35666.0,"volume_24h":62.14906458,"last_trade_price":36196.52}
비트코인 가격: 36196.52
'스프링 프레임워크 > 스프링 기초' 카테고리의 다른 글
14. java환경에서 redis 테스트 (0) | 2021.08.03 |
---|---|
12. 자바 설치 방법 (0) | 2020.11.28 |
11. 자바 타이머 timeTask 예제 (스케쥴러) (0) | 2020.06.30 |
10. db 시간 timestamp error (0) | 2020.03.26 |
09. 스프링에서 myBatis사용하여 mySQL db연동 (0) | 2019.06.24 |