HttpURLConnection

개발세발·2024년 1월 5일

HttpURLConnection

  • URLConnection의 하위 클래스로 Http 프로토콜을 사용하여 특정 웹 서버와 통신하기 위한 클래스이다.
  • Http의 GET, POST, PUT, DLETE 등 메서드를 지원하며, Http의 요청과 응답을 처리할 수 있다.
  1. URL 객체 생성
  2. 연결 초기화: HttpURLConncetion의 객체를 얻는다. openConnection()
  3. Http 메서드 설정: setRequestMethod()를 사용하여 원하는 Http 메서드를 설정한다.
  4. 요청 헤더 설정(선택): 필요한 경우, setRequestProperty()메서드를 사용하여 요청 헤더를 설정한다.
  5. 요청 본문 작성(선택): POST, PUT과 같은 메서드를 사용할 때, 출력 스트림을 사용하여 요청 본문을 작성한다.
  6. 서버 응답 확인: getReponseCode()메서드를 호출하여 서버에서 변환한 Http 응답 코드를 확인한다.
  7. 응답 헤더 읽기(선택): 필요한 경우, getHeaderField() 또는 관련 메서드를 사용하여 응답 헤더를 읽는다.
  8. 응답 본문 읽기: InputStream을 사용하여 본문을 읽고 처리한다.
  9. 연결 종료: 연결을 끊고 리소스를 해제.
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();
    }
}

``` 

0개의 댓글