我正在尝试访问网站,但无法将收集到的“ 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);
我有一个VB。NET 2008程序,该程序使用SOAP协议访问由WSDL定义的Siebel web服务。 Siebel web服务要求包含用户名、密码和会话类型的头包含在服务请求中,但该头未在WSDL中定义。 因此,当我使用soapUI实用工具测试WSDL时,WSDL定义的请求如下所示: 但上述方法不起作用,因为它包含一个缺少用户和会话凭据的空头。仅当我手动替换
问题内容: 我将这个拦截器添加到我的OkHttp客户端中: 如何在拦截器中添加标题以进行请求? 我尝试了这个,但是我犯错了,创建新请求时我丢失了请求: 请注意,我知道我可以在创建请求时添加标头,如下所示: 但这不符合我的需求。我在拦截器中需要它。 问题答案: 最后,我以这种方式添加了标题:
问题内容: 这是我的第一篇文章。 我刚刚开始学习Go和Angular,并且尝试将angular应用程序连接到go api。我已经写了这两本书,并且一直坚持找出问题的根源。我以为这是一个CORS问题,但是如果我在Angular http请求中不包含代码的标题行,它就可以正常工作。在这一点上,我只是想添加标题。授权代码尚未实现。 这两个应用程序都在本地运行,端口5000上的Go应用程序和4200端口上
问题内容: 之前我使用模块在请求中添加标头。现在,我正在对该模块尝试相同的操作。 这是我正在使用的python请求模块:http : //pypi.python.org/pypi/requests 如何向和添加标头。说我必须在标题的每个请求中添加密钥。 问题答案: 从http://docs.python- requests.org/en/latest/user/quickstart/ 您只需要用标
问题内容: 我想将HtmlUnit cookie保存到一个文件,然后在下一次运行时从该文件中加载它们。我怎样才能做到这一点?谢谢。 问题答案:
问题内容: 我们正在将AJAX请求发布到本地运行的服务器,即 该javascript正在执行的页面也从localhost:9000提供服务,即,这完全像一个同源请求。 但是,由于某种原因,Google Chrome总是在结果请求中设置Origin标头,从而导致我们的服务器基于错误的假设(即CORS请求)阻止该请求。 在Firefox中不会发生这种情况。 此外,Firefox和Chrome均未发送O