当前位置: 首页 > 知识库问答 >
问题:

Java+HtmlUnit WebClient+SSL页面

贺季同
2023-03-14

我在使用htmlUnit WebDriver解析HTML页面时遇到了一些问题。我没有任何例外。我的代码如下所示:

   public static void main(String[] args)
        throws FailingHttpStatusCodeException, MalformedURLException,
        IOException {

       WebClient wc = initWebClient();
       HtmlPage page = wc.getPage(Constants.START_PAGE);

       HtmlTextInput userInput = (HtmlTextInput) page
            .getElementById(Constants.INPUT_USERNAME_ID);
       userInput.setText(Constants.USERNAME_VALUE);

       HtmlPasswordInput passwordInput = (HtmlPasswordInput) page
            .getElementById(Constants.INPUT_PASSWORD_ID);
       passwordInput.setText(Constants.PASSWORD_VALUE);

       // get submit button
       HtmlSubmitInput submitButton = (HtmlSubmitInput) page
            .getElementById(Constants.SUBMIT_BUTTON_ID);

       HtmlPage afterLoginPage = submitButton.click();
       System.out.println(afterLoginPage.asXml());

       // some further processing
       ....
    }

    private static WebClient initWebClient(){
       WebClient wc = new WebClient(BrowserVersion.CHROME);
       wc.getCookieManager().setCookiesEnabled(true);
       wc.getOptions().setJavaScriptEnabled(false);
       wc.getOptions().setThrowExceptionOnScriptError(true);

       System.out.println("USE SSL");
       wc.getOptions().setUseInsecureSSL(true);

       return wc;
   }

在上面的XML页面源码中,我可以找到我的名字。所以,我似乎正确地记录了它。

    for(some loop){
            // create new WebClient, because it is MULTITHREADING processing. WebDriver is not thread safe so I need to create new WebClient for every thread
            WebClient wc = initWebClient();
            String url = "https://website/details/31944";
            HtmlPage detailsPage = wc.getPage(url);

            System.out.println(url);
            System.out.println(detailsPage.getUrl());
     }
      https://website/details/31944
      http://website/details/31944

共有1个答案

谢英光
2023-03-14

我已经用cookie解决了这个问题。

    public static void main(String[] args)
        throws FailingHttpStatusCodeException, MalformedURLException,
        IOException {

        WebClient wc = initWebClient(null);

        HtmlPage page = wc.getPage(Constants.START_PAGE);

        HtmlTextInput userInput = (HtmlTextInput) page
            .getElementById(Constants.INPUT_USERNAME_ID);
        userInput.setText(Constants.USERNAME_VALUE);

        HtmlPasswordInput passwordInput = (HtmlPasswordInput) page
            .getElementById(Constants.INPUT_PASSWORD_ID);
        passwordInput.setText(Constants.PASSWORD_VALUE);

        // get submit button
        HtmlSubmitInput submitButton = (HtmlSubmitInput) page
            .getElementById(Constants.SUBMIT_BUTTON_ID);

        HtmlPage afterLoginPage = submitButton.click();

       Set<Cookie> cookies = wc.getCookieManager().getCookies();
       ....
       ....
       // for every thread I create new WebClient
       for(threads loop){
           WebClient wc2 = initWebClient(cookies);
       }
    }

    private static WebClient initWebClient(Set<Cookie> cookies) {
       WebClient wc = new WebClient(BrowserVersion.CHROME);
       wc.getCookieManager().setCookiesEnabled(true);
       wc.getOptions().setJavaScriptEnabled(false);
       wc.getOptions().setThrowExceptionOnScriptError(false);

       if (cookies != null) {
          Iterator<Cookie> i = cookies.iterator();
          while (i.hasNext()) {
              wc.getCookieManager().addCookie(i.next());
          }
        }

        return wc;
   }
 类似资料:
  • 问题内容: 我已经构建了一个Java程序作为服务器上数据库的前端,并且正在尝试使用SSL加密客户端和服务器之间的流量。这是我发出的用于创建服务器证书的命令: 以下是相关代码: 当我尝试运行此命令时,我发现了这一点: java.security.NoSuchAlgorithmException:构造实现时出错(算法:默认,提供程序:SunJSSE,类:com.sun.net.ssl.internal

  • 问题内容: 我正在尝试使用安全套接字层(HTTPS)与Java中的PHP脚本建立连接,但是我发现为了确保最大的安全性/有效性,我必须将网站使用的SSL证书导入到我的应用程序中…我不知道该怎么做。 如果有帮助,我的SSL证书不是自签名的,而是由StartSSL提供的,并且我正在使用Eclipse IDE。 有人能指出我正确的方向吗?即,我需要什么文件,应该在哪里导入它们,以及在Java中需要什么代码

  • 我正在尝试将所有流量重定向到安全页面。我尝试使用PHP重定向和htaccess重定向。他们成功了,但问题是我得到了以下错误: "您试图访问domain.com,但实际上您访问了一个自称为www.domain.com.的服务器。这可能是由于服务器配置错误或更严重的原因造成的。您网络上的攻击者可能正试图让您访问假(且可能有害)版本的domain.com." 我们是同一个域。如何解决SSL证书适用于一个

  • 问题内容: 假设我编写了两个Java应用程序:并且它们被部署并在两个单独的服务器上运行(部署到和部署到),并且这两个应用程序需要通过SSL相互通信(双向)。我们还假设每个应用程序都有自己的SSL证书。 我(Java程序员)如何编码并验证彼此的SSL证书?每个CA是否都提供某种我可以使用的RESTful API ?Java是否有自己的证书验证API?我可以使用开放源代码的第三方JAR或服务吗? 当我

  • 我正在学习SSL通信,我遇到了这个问题。我正在编写一个简单的客户端,它试图与本地apache服务器握手。服务器启用https。我将服务器证书添加到所有可能的信任存储(jdk中的一个 注意:我从以下教程中获取了代码: http://docs.oracle.com/javase/7/docs/technotes/guides/security/jsse/JSSERefGuide.html#KRB 停留

  • 这就是第一台服务器的样子: 这是第二台服务器的样子: 第一台服务器运行良好,但当我试图运行第二台服务器时,我会得到follwing错误,这意味着到第一台服务器的连接失败。如果有人能帮助我,我会很高兴的!