개발/Java
Java - URL 쿼리를 post 방식으로 전송하기
뉴에이스
2018. 10. 2. 18:00
요청(클라이언트 -> 서버), Request
약속
페이지 정보를 요청할 때의 약속 방식
3가지 부분으로 구분해서 요청해야 한다.
시작라인 - 요청방식, 요청URI, 프로토콜버전
헤더 - 헤더값들을 전송 (헤더이름:헤더값...)
바디 - POST 방식일 경우 쿼리스트링(파라미터 정보) 또는 파일 전송일 경우 내용
GET방식의 경우
GET /test.do?id=abcd HTTP/1.1 -> 첫줄이 GET 방식이 아닌경우 POST로 인식된다.
a: aaaa -> 헤더이름:헤더값
b: bbbb -> 헤더이름:헤더값
없음(바디)-> GET방식일 경우에는 body가 없다. url에 붙어 가기 때문에..
POST방식의 경우
POST /test.do HTTP/1.1
a:aaaa
b:bbbb
id=abcd
응답(서버 -> 클라이언트), Response
약속
소스
public static void main(String[] args) {
try {
URL url = new URL("https://www.daum.net");
/*
URL 클래스는 POST 방식 요청이 없음.
사용자가 지정해서 헤더값을 전송할 수 없음
쿼리스트링을 바디에 쓸 수 없다
위의 3가지 처리하는 HttpURLConnection
*/
// URLConnection이 HttpURLConnection의 부모클래스이기 때문에 형변환이 필요
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
// 메서드 방식을 명시적으로 지정하기
conn.setRequestMethod("POST");
// 요청 헤더를 지정 (헤더이름:헤더값)
conn.setRequestProperty("my-name", "aaaa");
// 파라미더 전송 (쿼리스트링)
// 연결된 URL 쪽으로 데이터를 쓸 수 있다
conn.setDoOutput(true);
// 쓰기객체 얻기
OutputStream out = conn.getOutputStream();
// 문자열을 utf-8 방식으로 변환해서 바이트로 입력
out.write("id=a&pass=1234".getBytes("utf-8"));
out.close();
// 서버의 응답코드를 확인 (정상연결일 경우 200 반환)
int code = conn.getResponseCode();
System.out.println("응답코드 : " + code);
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
} catch (Exception e) {
e.printStackTrace();
}
}
결과
응답코드 : 200