JAVA 2009. 5. 18. 00:14
인터넷에 존재하는 웹 페이지 중에서 접근을 위해서는 HTTP 인증을 해야 하는 페이지가 간혹 있다. 이러한 페이지에는 단순히 인증 정보를 POST와 같은 HTTP 프로토콜의 메소드로 넘겨 인증을 할 수가 없는데, 이럴 땐 Java에서 제공하는 HttpURLConnection 객체의 setRequestProperty 메소드를 이용해서 요청 헤더에 필요한 인증 정보를 첨부해서 보내면 인증을 할 수 있어 원하는 웹 컨텐츠에 접근할 수 있다.

필요한 코드는 다음과 같다.

HttpURLConnection connection = (HttpURLConnection)url.openConnection();

connection.setRequestProperty("Authorization", "Basic " +

        new sun.misc.BASE64Encoder().encode("[아이디]:[비밀번호]".getBytes()));


이 렇게 작성한 다음 인증 정보를 요청 property에 지정하였으므로 connection 객체를 통해서 InputStream 타입으로 읽어오면 원하는 컨텐츠에 접근하여 데이터를 가져올 수 있다. setRequestProperty에는 여러가지 요청정보를 추가할 수 있는데, 일단 가장 필요한 내용은 인증 정보이므로 다른건 나도 잘 모르겠고, 간단한 작업을 하는덴 그리 필요하진 않은 것 같다...

그런데 "Basic"이라는 건 인증 수준을 나타내는 건가? 검색해 보니... RFC 2617에 Basic은 클라이언트가 아이디와 패스워드를 각각의 영역에 접근하기 위해 제공해야 하는 모델에 기반한 인증 스키마라고 한다. 아래는 RFC 2617의 원문중....

"The "basic" authentication scheme is based on the model that the client must authenticate itself with a user-ID and a password for each realm."

"opaque string"이란 단어가 나오는데... BASE64Encoder로 인코딩해서 리턴되는 문자열을 가리키는 것 같다.
posted by 나는너의힘
: