简体   繁体   English

如何将 cookie 添加到 HtmlUnit 请求标头?

[英]How can I add cookies to HtmlUnit request header?

I'm trying to access a site and I'm having trouble adding the "Cookie" collected to outgoing POST request header.我正在尝试访问一个站点,但在将收集到的“Cookie”添加到传出的 POST 请求标头时遇到了问题。 I've been able to verify that they are present in the CookieManager.我已经能够验证它们是否存在于 CookieManager 中。

Any alternative means to HtmlUnit would also be appreciated.任何替代 HtmlUnit 的方法也将不胜感激。

public static void main( String[] args )
    {
        // Turn off logging to prevent polluting the output.
        Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(Level.OFF);

        try {
            final WebClient webClient = new WebClient(BrowserVersion.CHROME);



            webClient.getOptions().setCssEnabled(false);


            CookieManager cookieManager = webClient.getCookieManager();

            out.println(cookieManager.getCookies().toString());

            out.println("start");

            final HtmlPage loginPage = webClient.getPage("my_url");


            Map<?, ?> additionalRequest1 = loginPage.getWebResponse().getWebRequest().getAdditionalHeaders();

            Iterator<?> ite0 = additionalRequest1.entrySet().iterator();
             while(ite0.hasNext()){
                 out.println(ite0.next());
             }
             out.println("\n");

            out.println("after loginPage");



            out.println(cookieManager.getCookies().toString());

            Set<Cookie> cookies = new HashSet<Cookie>();
            cookies.addAll(webClient.getCookieManager().getCookies());
            StringBuilder cookieHeader = new StringBuilder();

            Iterator<Cookie> ite = cookies.iterator();
            while (ite.hasNext()){
                Cookie cookie = ite.next();
                cookie.getDomain().substring(1);
                String name = cookie.getName();
                String value = cookie.getValue();

                System.out.println("Cookie:" + name + "=" +value);
                webClient.addRequestHeader(name, value);
            }


            final HtmlTextInput login = (HtmlTextInput) loginPage.getElementById("login");
            login.setValueAttribute(USER_EMAIL);

            final HtmlPasswordInput password = (HtmlPasswordInput) loginPage.getElementById("password");
            password.setValueAttribute(USER_PASS);


            final HtmlSubmitInput button_submit = loginPage.getElementByName("login_submit");

            final HtmlPage accessGrantingPage = button_submit.click();
            final HtmlForm  requestForm = (HtmlForm)accessGrantingPage.getElementById("consent_form");

            Map<?, ?> additionalRequest = accessGrantingPage.getWebResponse().getWebRequest().getAdditionalHeaders();

            Iterator<?> ite2 = additionalRequest.entrySet().iterator();
             while(ite2.hasNext()){
                 out.println(ite2.next());
             }
             out.println("\n");

            out.println("after accessGrantingPage");

            out.println(cookieManager.getCookies().toString());
            final HtmlButton consent_accept_button = accessGrantingPage.getElementByName("consent_accept");

            try {
                final HtmlPage authorizationPage = consent_accept_button.click();
                out.println("after authorizationPage");
                out.println(authorizationPage.getUrl().toString());
                out.println(authorizationPage.getWebResponse().getStatusMessage());

                out.println(authorizationPage.getWebResponse().getResponseHeaders());

            } catch (RuntimeException re){
                re.printStackTrace();
            }
            webClient.closeAllWindows();
        } catch (IOException ioe){
            ioe.printStackTrace();
        } finally {

        }  

    }

I found out that I can add the header by using setadditionalHeader() from WebClient.我发现我可以使用 WebClient 中的 setadditionalHeader() 添加标题。

        for (int index = 0; index < boxCookies.size(); index++){
            String cookie = boxCookies.toArray()[index].toString();
            String cookieNameValue =cookie.substring(0, cookie.indexOf(";"));
            String name = cookieNameValue.substring(0, cookieNameValue.indexOf("="));
            String value = cookieNameValue.substring(cookieNameValue.indexOf("=") + 1);

            if (index == 0){
                cookieHeader.append(name + "=" +value);
            } else {
                cookieHeader.append("; "+ name + "=" +value);
            }

        }
        WebRequest secondLoginPage = new WebRequest(AUTHORIZE_URL);
        secondLoginPage.setAdditionalHeader("Cookie", cookieHeader.toString());
        HtmlPage loginPage2 = webClient.getPage(secondLoginPage);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM