본문 바로가기

Java/공부공부

[Java] 자바 HTTP통신 (HttpURLConnection)

 

 

[ URL 설정 ]

요청을 보낼 url객체 생성하고,  openConnection() 메소드 호출하면

해당 URL에 대한 연결 객체를 반환한다. 이 반환된 객체를 HttpURLConnection 로 캐스팅하면  네트워크 연결 준비 완료.

URL url = new URL("https://example.com");
HttpURLConnection con = (HttpURLConnection) url.openConnection(); // 연결 열기

* 실제 네트워크 연결은 getInputStream(), getOutputStream() 메서드 호출 시점.

 


 

[ 네트워크 옵션 ]

 

(메서드, 헤더, 입출력 사용 설정)

con.setRequestMethod("POST");					// "GET", "PUT", "DELETE" 등
con.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); // 요청의 콘텐츠 타입
con.setRequestProperty("Accept", "application/json");		// 서버로부터 받을 콘텐츠 타입
con.setDoOutput(true);						// POST나 PUT 요청에서 데이터를 보낼 경우

 - setRequestMethod(String method) : 요청 메서드 설정 (GET, POST, PUT, DELETE)

- setRequestProperty(String key, String value) : 요청 속성 설정.

- setDoOutput(Boolean boolean) : 데이터 전송을 위한 설정. 출력 스트림(OutputStream) 활성화.

    (폼 데이터, JSON, XML 등 요청 본문(body)에 데이터를 담아 전송할 때 필요)

 

(타임아웃 설정) 

con.setConnectTimeout(5000);  // 연결 타임아웃
con.setReadTimeout(5000);     // 읽기 타임아웃

- setConnectTimeout(int time) : 서버에 연결을 시도할 때, 설정 시간을 초과하면 SocketTimeoutException 발생.

- setReadTimeout(int time) : 서버 연결 이후 데이터를 읽을 때, 설정 시간 내에 응답이 없으면 SocketTimeoutException 발생.

=> 선택사항이지만 무한정 대기 방지를 위해 지정. (밀리초단위)

 


 

[ 출력스트림 ] _전송 데이터 및 연결 

// 전송할 데이터 준비 (예: JSON 문자열)
String data = "{\"name\":\"John\", \"age\":30}";

// 출력 스트림을 열고 데이터를 전송
OutputStream os = con.getOutputStream();
os.write(data.getBytes("UTF-8")); // UTF-8로 인코딩
os.flush(); 		  	 // 스트림 비우기
os.close(); 		  	 // 스트림 닫기

- getOutputStream() : 호출시 자동으로 네트워크 연결 시작.

- write(data) : 데이터를 출력 스트림에 입력.

- close() : 스트림을 닫으며 네트워크 연결 종료 및 데이터 전송 완료.

=> close()가 flush()도 수행하기 때문에 flush는 생략 가능.

 

(명시적으로 연결)

conn.connect()

=> 출력 스트림을 열고 데이터를 작성하는 과정에서는 자동으로 연결되기 때문에 호출 불요.

 


 

[ 응답 코드 확인 ]

int responseCode = con.getResponseCode();

 


 

[ 입력스트림 ] _전송 데이터 및 연결 

 

* InputStreamReader : 바이트 스트림을 문자 스트림으로 변환.

* BufferedReader : 문자 스트림을 읽고, 버퍼링을 통해 성능 향상.

                                 데이터를 메모리에 저장해두고 한꺼번에 처리해 입출력 성능을 개선.

InputStream is = con.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line;
while ((line = reader.readLine()) != null) {
  // 응답 데이터 처리
}
reader.close();

- getInputStream() : 네트워크 연결이 열리고 데이터를 읽음.

- readLine() : 데이터를 줄 단위로 읽음.

- close(): 입력 스트림을 닫고 네트워크 연결 종료.

 

 


(참고블로그)

https://blueyikim.tistory.com/2199

 

[요약] Java URLConnection과 HttpURLConnection 사용 방법

URL(대부분 HTTP 프로토콜 사용)을 통해 서버와 통신하는 Java 프로그램을 개발 하기 위 해 URLConnection 및 HttpURLConnection 클래스를 사용한다. 예를들어 파일, 웹 페이지를 업로드 및 다운로드, HTTP 요청

blueyikim.tistory.com