Java 如何将Cookie添加到HtmlUnit请求头?

Java 如何将Cookie添加到HtmlUnit请求头?,java,htmlunit,Java,Htmlunit,我试图访问一个站点,但在将收集的“Cookie”添加到传出的POST请求头时遇到问题。我已经能够验证他们是否在CookieManager中 如有任何替代方法,也将不胜感激 public static void main( String[] args ) { // Turn off logging to prevent polluting the output. Logger.getLogger("com.gargoylesoftware.htmlunit"

我试图访问一个站点,但在将收集的“Cookie”添加到传出的POST请求头时遇到问题。我已经能够验证他们是否在CookieManager中

如有任何替代方法,也将不胜感激

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 {

        }  

    }
publicstaticvoidmain(字符串[]args)
{
//关闭日志记录以防止污染输出。
Logger.getLogger(“com.gargoylesoftware.htmlunit”).setLevel(Level.OFF);
试一试{
最终WebClient WebClient=新的WebClient(BrowserVersion.CHROME);
webClient.getOptions().setCssEnabled(false);
CookieManager CookieManager=webClient.getCookieManager();
out.println(cookieManager.getCookies().toString());
out.println(“开始”);
最终HtmlPage loginPage=webClient.getPage(“我的url”);
Map additionalRequest1=loginPage.getWebResponse().getWebRequest().getAdditionalHeaders();
迭代器ite0=additionalRequest1.entrySet().Iterator();
while(ite0.hasNext()){
out.println(ite0.next());
}
out.println(“\n”);
out.println(“登录页面后”);
out.println(cookieManager.getCookies().toString());
Set cookies=new HashSet();
cookies.addAll(webClient.getCookieManager().getCookies());
StringBuilder cookieHeader=新的StringBuilder();
迭代器ite=cookies.Iterator();
while(ite.hasNext()){
Cookie Cookie=ite.next();
cookie.getDomain()子字符串(1);
字符串名称=cookie.getName();
字符串值=cookie.getValue();
System.out.println(“Cookie:+name+”=“+value”);
webClient.addRequestHeader(名称、值);
}
最终HtmlTextInput登录=(HtmlTextInput)loginPage.getElementById(“登录”);
login.setValueAttribute(用户\电子邮件);
最终HtmlPasswordInput密码=(HtmlPasswordInput)loginPage.getElementById(“密码”);
password.setValueAttribute(用户通行证);
最终HtmlSubmitInput按钮_submit=loginPage.getElementByName(“登录_提交”);
最终HtmlPage accessGrantingPage=按钮_提交。单击();
最终HtmlForm requestForm=(HtmlForm)accessGrantingPage.getElementById(“同意表单”);
Map additionalRequest=accessGrantingPage.getWebResponse().getWebRequest().getAdditionalHeaders();
迭代器ite2=additionalRequest.entrySet().Iterator();
while(ite2.hasNext()){
out.println(ite2.next());
}
out.println(“\n”);
out.println(“访问授权页之后”);
out.println(cookieManager.getCookies().toString());
最终HtmlButton同意接受按钮=accessGrantingPage.getElementByName(“同意接受”);
试一试{
最终HtmlPage authorizationPage=同意\接受\按钮。单击();
out.println(“授权后页”);
out.println(authorizationPage.getUrl().toString());
out.println(authorizationPage.getWebResponse().getStatusMessage());
out.println(authorizationPage.getWebResponse().getResponseHeaders());
}捕获(运行时异常re){
关于printStackTrace();
}
webClient.closeAllWindows();
}捕获(ioe异常ioe){
ioe.printStackTrace();
}最后{
}  
}

我发现我可以使用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);
for(int index=0;index