【问题标题】:Jetty client http error code 412码头客户端http错误代码412
【发布时间】:2015-09-17 07:51:17
【问题描述】:

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

该网站在网络浏览器上运行良好。

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

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

我无法找到导致问题的标题。

这是来自浏览器的标题 请求标头

  • 接受:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8
  • 接受编码:gzip、放气
  • 接受语言:en-GB,en-US;q=0.8,en;q=0.6
  • Cache-Control:max-age=0
  • 连接:保持活动状态
  • 内容长度:318
  • 内容类型:application/x-www-form-urlencoded
  • Cookie:语言=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
  • 推荐人:https://www.example.com/context/home
  • 升级不安全请求:1
  • User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36

我从码头客户端设置的相同标题。

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。由于该网站超出了我们的控制范围,我真的无法追踪问题所在。

请帮我解决这个问题。感谢任何解决客户端问题的指针。有什么方法可以确定导致此问题的标头。

【问题讨论】:

  • 看起来对于发布请求内容长度没有明确要求。所以内容长度似乎没有问题
  • 我看到这个问题可能与 JSF 视图状态参数有关。我提交的表单包含 javax.faces.ViewState 隐藏参数。如果从提交中删除此参数,我会返回相同的页面作为响应。使用此参数,我得到 412。问题仍然是相同的表单提交适用于浏览器,但不适用于 jetty/apache httpclient

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


【解决方案1】:

我解决了这个问题。

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

【讨论】:

    猜你喜欢
    • 2017-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-30
    • 2012-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多