gpt4 book ai didi

java - 如何连接 Jsoup 和私有(private) SSL 证书?

转载 作者:太空宇宙 更新时间:2023-11-03 15:08:30 25 4
gpt4 key购买 nike

我在使用 Jsoup 时遇到问题,无法使用私有(private)安全证书登录网站。我将尝试使用 HtmlUnit 并且一切正常,以这种方式:

public class TestHtmlUnit {
private final static Logger logger = Logger.getLogger(TestHtmlUnit.class);
private WebClient webClient;
private PropertiesManagement management;

private void loginForm() throws Exception {
final HtmlPage page1 = webClient.getPage(management.getHomeURL());
final HtmlForm form = page1.getFormByName("form1");
final HtmlSubmitInput button = form.getInputByName("btnAccedi");
final HtmlTextInput usernameField = form.getInputByName("txtUtente");
final HtmlPasswordInput passwordField = form.getInputByName("txtPwd");
usernameField.setValueAttribute(management.getUsername());
passwordField.setValueAttribute(management.getPassword());
final HtmlPage page2 = button.click();
printPage(page2);

logger.debug("End!!");
}

public void printPage(HtmlPage page) {
WebResponse response = page.getWebResponse();
String content = response.getContentAsString();
logger.debug("HTML SOURCE: " + content);
}

public void init() {
try {
webClient = new WebClient();
management = new PropertiesManagement();
webClient.getOptions().setJavaScriptEnabled(false);
webClient.getOptions().setUseInsecureSSL(true);
webClient.getOptions().setSSLClientCertificate(management.getFilePathURL(), management.getPassword(), management.getSSLProtocol());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public static void main(String[] args) throws Exception {
TestHtmlUnit testHtmlUnit = new TestHtmlUnit();
testHtmlUnit.init();
testHtmlUnit.loginForm();
}

}

但是当我尝试使用相同的证书与 Jsoup 连接到同一站点时,我收到“证书未正确导入”的响应。

我该怎么做?

如果你问“如果你可以使用 htmlunit,为什么还需要使用 jsoup?” (好问题),我的回答是“因为我无法使用 htmlUnit 导航很多弹出页面 :D!”

最佳答案

我自己解决:

FileInputStream fin = new FileInputStream(management.getFilePath());
KeyStore ks = KeyStore.getInstance(management.getSSLProtocol());
ks.load(fin, management.getPassword().toCharArray());
System.setProperty("javax.net.ssl.keyStore", "certificate.jks");
System.setProperty("javax.net.ssl.keyStorePassword", management.getPassword());

Connection.Response res = Jsoup.connect(management.getHomeURL()).
timeout(5000).ignoreHttpErrors(true).followRedirects(true).execute();
res = Jsoup.connect(management.getHomeURL()).timeout(5000).execute();
Document post = res.parse();

System.out.println(post.html());

现在需要一些优化...但这是下一步 :D

关于java - 如何连接 Jsoup 和私有(private) SSL 证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36618800/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com