[ 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 > 공부공부' 카테고리의 다른 글
[JAVA/JSP] jsp include (0) | 2024.10.16 |
---|---|
[JAVA/JPA] CompletableFuture 자바 비동기 처리 (멀티스레드) (0) | 2024.10.16 |
[Java] 자바 HTTP 통신_GET요청 (RestTemplate) (0) | 2024.07.28 |
[Java/intelliJ] Serializable 인터페이스 / 객체 직렬화 & 역직렬화 (0) | 2024.03.23 |
[Java] Lombok @ 어노테이션 (0) | 2024.03.21 |