소개
java.net
패키지의 HttpURLConnection
클래스를 사용하여 Java HTTP 요청을 프로그래밍적으로 보낼 수 있습니다. 이 기사에서는 Java 프로그램에서 HttpURLConnection
을 사용하여 GET
및 POST
요청을 보내고 응답을 출력하는 방법을 배우게 됩니다.
필수 조건
이 HttpURLConnection
예제를 위해서는 Spring MVC 튜토리얼을 완료했어야 합니다. 왜냐하면 이 튜토리얼에는 GET
및 POST
HTTP 메서드에 대한 URL이 포함되어 있습니다.
localhost
Tomcat 서버에 배포하는 것을 고려해보세요.
SpringMVCExample 요약
Java HTTP GET 요청
localhost:8080/SpringMVCExample/
로그인 페이지에 대한 Java HTTP GET 요청
localhost:8080/SpringMVCExample/login
Java HTTP POST 요청
localhost:8080/SpringMVCExample?userName=Pankaj
localhost:8080/SpringMVCExample/login?userName=Pankaj&pwd=apple123
– 여러 매개변수를 위한 것
양식에서 매개변수 추출하기
로그인 페이지의 HTML에는 다음과 같은 양식이 포함되어 있습니다:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Login Page</title>
</head>
<body>
<form action="home" method="post">
<input type="text" name="userName"><br>
<input type="submit" value="Login">
</form>
</body>
</html>
method
는POST
입니다.action
은home
입니다.localhost:8080/SpringMVCExample/home
userName
은text
유형입니다.
POST
요청을 구성할 수 있습니다:
localhost:8080/SpringMVCExample/home?userName=Pankaj
이것은 HttpURLConnection
예제의 기초로 제공됩니다.
HttpURLConnection
예제
HttpURLConnection
클래스를 사용하여 Java HTTP 요청을 보내는 단계는 다음과 같습니다:
GET
또는POST
URL 문자열에서URL
객체를 만듭니다.openConnection()
메서드를 호출하여HttpURLConnection
의 인스턴스를 반환하는 URL 객체에 대한openConnection()
메서드를 호출합니다.HttpURLConnection
인스턴스에서 요청 메서드를 설정하십시오 (기본값은GET
입니다).HttpURLConnection
인스턴스에서"User-Agent"
,"Accept-Language"
등과 같은 요청 헤더 값을 설정하려면setRequestProperty()
메서드를 호출하십시오.getResponseCode()
를 호출하여 응답 HTTP 코드를 가져올 수 있습니다. 이렇게 함으로써 요청이 성공적으로 처리되었는지 또는 HTTP 오류 메시지가 발생했는지 알 수 있습니다.GET
의 경우Reader
및InputStream
을 사용하여 응답을 읽고 그에 따라 처리하십시오.POST
의 경우 코드가 응답을 처리하기 전에HttpURLConnection
인스턴스에서OutputStream
을 가져와서POST
매개변수를 작성해야 합니다.
다음은 Java GET
및 POST
요청을 보내는 HttpURLConnection
을 사용하는 예제 프로그램입니다:
package com.journaldev.utils;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpURLConnectionExample {
private static final String USER_AGENT = "Mozilla/5.0";
private static final String GET_URL = "https://localhost:9090/SpringMVCExample";
private static final String POST_URL = "https://localhost:9090/SpringMVCExample/home";
private static final String POST_PARAMS = "userName=Pankaj";
public static void main(String[] args) throws IOException {
sendGET();
System.out.println("GET DONE");
sendPOST();
System.out.println("POST DONE");
}
private static void sendGET() throws IOException {
URL obj = new URL(GET_URL);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("User-Agent", USER_AGENT);
int responseCode = con.getResponseCode();
System.out.println("GET Response Code :: " + responseCode);
if (responseCode == HttpURLConnection.HTTP_OK) { // 성공
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// 결과 출력
System.out.println(response.toString());
} else {
System.out.println("GET request did not work.");
}
}
private static void sendPOST() throws IOException {
URL obj = new URL(POST_URL);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("User-Agent", USER_AGENT);
// POST 전용 - 시작
con.setDoOutput(true);
OutputStream os = con.getOutputStream();
os.write(POST_PARAMS.getBytes());
os.flush();
os.close();
// POST 전용 - 끝
int responseCode = con.getResponseCode();
System.out.println("POST Response Code :: " + responseCode);
if (responseCode == HttpURLConnection.HTTP_OK) { // 성공
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// 결과 출력
System.out.println(response.toString());
} else {
System.out.println("POST request did not work.");
}
}
}
코드를 컴파일하고 실행하십시오. 다음 출력이 생성됩니다:
OutputGET Response Code :: 200
<html><head> <title>Home</title></head><body><h1> Hello world! </h1><P> The time on the server is March 6, 2015 9:31:04 PM IST. </P></body></html>
GET DONE
POST Response Code :: 200
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>User Home Page</title></head><body><h3>Hi Pankaj</h3></body></html>
POST DONE
이 출력을 브라우저 HTTP 응답과 비교하십시오.
만약 HTTPS 프로토콜을 통해 GET
및 POST
요청을 보내야 한다면, java.net.HttpURLConnection
대신 javax.net.ssl.HttpsURLConnection
을 사용해야 합니다. HttpsURLConnection
은 SSL 핸드셰이크와 암호화를 처리할 것입니다.
결론
이 글에서는 Java 프로그램에서 HttpURLConnection
을 사용하여 GET
및 POST
요청을 보내고 응답을 출력하는 방법을 배웠습니다.
더 많은 Java 튜토리얼로 학습을 계속하세요.