HttpURLConnection
- URLConnection의 하위 클래스로 Http 프로토콜을 사용하여 특정 웹 서버와 통신하기 위한 클래스이다.
- Http의 GET, POST, PUT, DLETE 등 메서드를 지원하며, Http의 요청과 응답을 처리할 수 있다.
- URL 객체 생성
- 연결 초기화: HttpURLConncetion의 객체를 얻는다. openConnection()
- Http 메서드 설정: setRequestMethod()를 사용하여 원하는 Http 메서드를 설정한다.
- 요청 헤더 설정(선택): 필요한 경우, setRequestProperty()메서드를 사용하여 요청 헤더를 설정한다.
- 요청 본문 작성(선택): POST, PUT과 같은 메서드를 사용할 때, 출력 스트림을 사용하여 요청 본문을 작성한다.
- 서버 응답 확인: getReponseCode()메서드를 호출하여 서버에서 변환한 Http 응답 코드를 확인한다.
- 응답 헤더 읽기(선택): 필요한 경우, getHeaderField() 또는 관련 메서드를 사용하여 응답 헤더를 읽는다.
- 응답 본문 읽기: InputStream을 사용하여 본문을 읽고 처리한다.
- 연결 종료: 연결을 끊고 리소스를 해제.
package URLConnection;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
public class httpURLConnectionTest {
public static void main(String[] args) {
String apiKey="";
String lat;
String lon;
Scanner scanner = new Scanner(System.in);
System.out.print("input latitude: ");
lat = scanner.nextLine();
System.out.print("input longitude: ");
lon = scanner.nextLine();
String urlString = String.format("https://api.openweathermap.org/data/2.5/weather?lat=%s&lon=%s&appid=%s&units=metric",lat, lon, apiKey);
try{
URL url = new URL(urlString);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Accept", "application/json");
int reponseCode = connection.getResponseCode();
if(reponseCode==200){
// 1바이트씩 받는 정보를 스트림으로 데이터를 모아서 꺼내오고(Reader로:문자 데이터 읽을 수 있음) 이를 버퍼에 모아 놓는다.
// 이렇게 연결하는게 베스트
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer content = new StringBuffer();
while((inputLine=reader.readLine())!=null){
content.append(inputLine);
}
reader.close();
System.out.println("content.toString() = " + content.toString());
JsonObject jsonObject = JsonParser.parseString(content.toString()).getAsJsonObject();
JsonObject mainData = jsonObject.getAsJsonObject("main");
double temp = mainData.get("temp").getAsDouble();
System.out.println("temp = " + temp);
connection.disconnect();
}else{
System.out.println("오류임");
}
}catch (Exception e){
e.printStackTrace();
}
scanner.close();
}
}
```