Jetty客户端http错误代码412

时间:2015-09-17 07:51:18

标签: http jsf-2 http-headers viewstate jetty-9

我使用浏览器和jetty / apache httpclient访问一个网站(我隐藏原始网站名称,因为它违反了政策)。

该网站适用于网络浏览器。

使用api我可以登录网站,获取会话cookie JSESSIONID和主页html内容。但在那之后,当我提交任何表格或从html调用链接时,我收到HTTP错误代码412(前置条件失败)。

我理解此错误是客户端标头中的问题。我从浏览器设置了所有标题(使用chrome浏览器中的inspect元素进行检查)。我仍然有同样的错误。

我无法追踪导致问题的标题。

这是浏览器的标题 请求标题

  • 接受:text / html的,应用/ XHTML + xml的,应用/ XML; Q = 0.9,图像/ WEBP, / 的; Q = 0.8
  • 接受编码:gzip,deflate
  • 接受语言:EN-GB,EN-US; Q = 0.8,连接; Q = 0.6
  • 缓存控制:max-age = 0
  • 连接:keep-alive
  • 的Content-Length:318
  • 内容类型:应用/ X WWW的窗体-urlencoded
  • 曲奇:语言= en_IN; __gads = ID = 14c64d8f9fd7de54:T = 1424658276:S = ALNI_Mba1kvJO4mLo7R-T2jUJE9zCYck5A; SLB_Cookie = ffffffff09461c2d45525d5f4f58455e445a4a422971; JSESSIONID = 36m4Oo6dCML_Wvx-Wgmm9rtLh9mb​​URxnZhWIVwg-zHaNzFQeUt9C -1989013783!; _ga = GA1.3.379900459.1428120216
  • 主机:www.irctc.co.in
  • 产地:https://www.example.com
  • 的Referer:https://www.example.com/context/home
  • 升级不安全-要求:1
  • User-Agent:Mozilla / 5.0(Windows NT 10.0; WOW64)AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 44.0.2403.157 Safari / 537.36

我从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。由于网站不受我们控制,我真的无法追踪问题所在。

请帮我解决此问题。任何在客户端解决问题的指针都表示赞赏。我们有什么方法可以确定导致此问题的标题。

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。

表单参数值问题。我发送的编码值再次由jetty客户端编码