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

我正在尝试访问网站,但无法将收集到的“ Cookie”添加到传出的POST请求标头中。我已经能够验证它们是否存在于CookieManager中。

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 {

}

}

回答:

我发现可以使用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);

以上是 如何将Cookie添加到HtmlUnit请求标头? 的全部内容, 来源链接: utcz.com/qa/416820.html

回到顶部