Lee's Grow up

[Java/java] Jsoup를 사용 크로울링 Crawling 해보기 / 방법 & JAVA SSL 인증서 추가방법 javax.net.ssl.SSLHandshakeException 오류 해결 본문

PROGRAMMING/JAVA

[Java/java] Jsoup를 사용 크로울링 Crawling 해보기 / 방법 & JAVA SSL 인증서 추가방법 javax.net.ssl.SSLHandshakeException 오류 해결

효기로그 2019. 9. 27. 10:33
반응형

1. Jsoup를 활용한 URL 통신 기본 구조


String url = "크로울링 해올 홈페이지 주소 입력 "; //ex) https://naver.com"
Document doc = null;

try {
    doc = Jsoup.connect(url).get(); // doc에 홈페이지 정보를 담는다.
} catch (IOException e) {
    e.printStackTrace();
}

Elements element = doc.select("받아올 요소에 대한 정보 입력");
// ex <div class="test" ></div> 의 값을 가져 올 경우 "div.test" 를 인자로 넘긴다.

for(Element el : element.select("a.lnk")) {  // 추출해온 요소 출력
    System.out.println(el.text());
}

본인의 경우 인터넷에 나와있은 Jsoup를 사용한 크로울링 기본 사용법을 통해 위와 같이

실행하였지만....아래와 같은 오류가 발생하였다.

검색 결과 SSL 인증서 관련 오류였고 해결 방법으로 2가지가 존재했다.

  • 코딩으로 인증서 유효성 체크를 비활성화 하기
  • 해당 서버의 인증서를 자바 KeyStore에 저장하기

1-1. 코딩으로 인증서 유효성 체크 비활성화 하기

아래와 같은 코드를 추가 후 실행하기

TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
    public java.security.cert.X509Certificate[] getAcceptedIssuers() {
        return null;
    }

    public void checkClientTrusted(X509Certificate[] certs, String authType) {
    }

    public void checkServerTrusted(X509Certificate[] certs, String authType) {
    }
} };
// Install the all-trusting trust manager
final SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
// Create all-trusting host name verifier
HostnameVerifier allHostsValid = new HostnameVerifier() {
    public boolean verify(String hostname, SSLSession session) {
        return true;
    }
};

// Install the all-trusting host verifier
HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);

1-2. 서버의 인증서를 자바 KeyStore에 저장하기

*1. Portecle 다운로드 *

예제에서는 Portecle GUI를 사용한다.

다운로드 링크 https://sourceforge.net/projects/portecle/files/latest/download

2. SSL 인증서 생성

설치 완료 후 해당 폴더의 portecle.jar 파일을 실행

해당 접속 서버에서 인증서 다운로드 Examine > Examine SSL/TSL Connection... 클릭 후 접속 URL 입력

입력 후 OK 버튼 클릭 시 아래와 같은 방식으로 인증서 내용을 확인 / 저장 가능

3. 자바 KeyStore에 SSL 인증서 등록하기

구동중인 자바 버전의 $JAVA_HOME/lib/security/cacerts 파일을 열어서 새로 생성된 인증서를 추가합니다.

암호는 기본 changeit 입니다.

이제 새로운 인증서를 cacerts 파일에 추가해줍니다.

그 후, 리스트에 추가가 되었는지 확인 후 다시 java를 실행하면 Exception없이 실행이 됩니다.

2. Jsoup를 활용해 Naver에서 추천 선물 리스트 받아오기


String url = "https://search.naver.com/search.naver?sm=top_hty&fbm=1&ie=utf8&query=결혼+기념일+선물";
Document doc = null;

try {
    doc = Jsoup.connect(url).get();
} catch (IOException e) {
    e.printStackTrace();
}

Elements element = doc.select("div.rcmd_area");

System.out.println("Naver 기반 검색어 [결혼 기념일 선물] 관련 추천 순위 ");
int count = 1;
for (Element el : element.select("a.lnk")) { // 하위 뉴스 기사들을 for문 돌면서 출력
    System.out.println(count + " : " + el.text());
    count++;
}

실행 결과

반응형
Comments