안드로이드 크롤링 코드를 테스트하는데 다음과 같은 오류가 생겼다.
"javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found."
구글에서 서칭을 해본 결과, 이 문제를 해결할 수 있게 도와줄 블로그 글을 찾을 수 있었다.
HttpsURLConnection.setDefaultSSLSocketFactory 기본으로 설정
private void trustAllHosts() {
// Create a trust manager that does not validate certificate chains
TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return new java.security.cert.X509Certificate[] {};
}
@Override
public void checkClientTrusted(X509Certificate[] chain,
String authType) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] chain,
String authType) throws CertificateException {
}
}};
// Install the all-trusting trust manager
try {
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
}
catch (Exception e) {
e.printStackTrace();
}
}
try {
trustAllHosts();
// url을 열기 전에 trustAllHosts 호출
String url = "https://www.gov.kr/portal/vfnews";
Document d = Jsoup.connect(url).get();
Elements data = d.select("div.gallery_wrap").select("ul").select("li");
int size = data.size();
for (int j = 0; j < size; j++) {
String title = data
.eq(j)
.select("dl")
.select("dt a")
.text();
Log.d(TAG, "FESTIVAL TITLE : " + title);
}
} catch (IOException e) {
e.printStackTrace();
}
자료 참조
반응형
'Programando > Error-Handling' 카테고리의 다른 글
[Android Studio] Mac OS No Android SDK found 오류 (1) | 2021.11.08 |
---|---|
[Eclipse] git-receive-pack not permitted on ... 오류 (0) | 2021.08.19 |