Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- spring
- javascript
- 인코딩
- 오라클
- 에러
- 회고
- math
- 인강리뷰
- 우아한테크코스
- 공부
- 프로그래머스
- 이펙티브자바
- 독서리뷰
- 자바
- study
- Design Pattern
- Oracle
- 알고리즘
- 디자인패턴
- Java
- 카카오톡1차
- 매핑
- JPA
- 독서
- Eclipse
- 람다
- Singleton
- Head First Design Pattern
- 인프런
- 후기
Archives
- Today
- Total
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++;
}
실행 결과
반응형
'PROGRAMMING > JAVA' 카테고리의 다른 글
[JAVA/JPA] JPA 와 ORM 기본 개념 Hibernate ORM (0) | 2019.12.05 |
---|---|
[EFFECTIVE JAVA 3/E] 객체 생성자 파괴 (0) | 2019.11.04 |
[Java] Image/이미지를 BinaryData/바이너리데이타 로 변환 후 Base64(Encodig/Decoding)를 통해 text/문자로 변환 (0) | 2019.10.23 |
[Java/Lombok] Project Lombok 롬복 기초 사용법 / 다운로드 (0) | 2019.09.30 |
[JAVA/자바] COLLECTION API, 컬렉션 API 다루기 (0) | 2019.09.20 |
Comments