我使用浏览器和jetty / apache httpclient访问一个网站(我隐藏原始网站名称,因为它违反了政策)。
该网站适用于网络浏览器。
使用api我可以登录网站,获取会话cookie JSESSIONID和主页html内容。但在那之后,当我提交任何表格或从html调用链接时,我收到HTTP错误代码412(前置条件失败)。
我理解此错误是客户端标头中的问题。我从浏览器设置了所有标题(使用chrome浏览器中的inspect元素进行检查)。我仍然有同样的错误。
我无法追踪导致问题的标题。
这是浏览器的标题 请求标题
我从jetty客户端设置相同的标题。
Request request = httpClient.newRequest(url);
request.method(HttpMethod.POST);
request.agent(USER_AGENT);
request.accept("text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
request.header(HttpHeader.REFERER,"https://www.example.com/context/home");
request.header(HttpHeader.ACCEPT_ENCODING, "gzip, deflate");
request.header(HttpHeader.ACCEPT_LANGUAGE, "en-GB,en-US;q=0.8,en;q=0.6");
request.header(HttpHeader.CACHE_CONTROL, "max-age=0");
request.header(HttpHeader.CONNECTION, "keep-alive");
request.header(HttpHeader.CONTENT_TYPE, "application/x-www-form-urlencoded");
request.header(HttpHeader.HOST, "www.example.com);
for (Map.Entry<String, String> entry : params.entrySet()){
request.param(URLEncoder.encode(entry.getKey(), "UTF-8"), URLEncoder.encode(entry.getValue(), "UTF-8"));
if(!StringUtils.isEmpty(content)){
content+="&";
}
content+=URLEncoder.encode(entry.getKey(), "UTF-8")+"="+URLEncoder.encode(entry.getValue(), "UTF-8");
}
request.header(HttpHeader.CONTENT_LENGTH, ""+content.length());
我看到请求中存在JSESSIONID和SLB_Cookie。由于网站不受我们控制,我真的无法追踪问题所在。
请帮我解决此问题。任何在客户端解决问题的指针都表示赞赏。我们有什么方法可以确定导致此问题的标题。
答案 0 :(得分:0)
我解决了这个问题。
表单参数值问题。我发送的编码值再次由jetty客户端编码