개발/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