2015-09-17 10 views
0

Я получаю доступ к одному веб-сайту (я скрываю имя сайта происхождения, поскольку оно противоречит политике) с помощью браузера и причала/apache httpclient.Jetty client http код ошибки 412

Веб-сайт отлично работает с веб-браузером.

Использование api Я могу зайти на сайт, получить файл cookie JSESSIONID и домашнюю страницу html. Но после этого, когда я отправляю любую форму или вызываю ссылки из html, я получаю код ошибки HTTP 412 (условие Pre failed failed).

Я понимаю, что эта ошибка вызвана проблемой в заголовке клиента. Я установил все заголовки из браузера (проверен с помощью элемента проверки в браузере Chrome). Тем не менее у меня такая же ошибка.

Я не могу отследить, какой заголовок вызывает проблему.

Здесь заголовок из браузера заголовков запроса

  • Accept: Текст/HTML, приложение/XHTML + XML, приложение/XML; Q = 0,9, изображение/WebP, /; д = 0,8
  • Accept-Encoding: GZIP, выкачать
  • Accept-Language: EN-GB, EN-US; д = 0,8, ан; д = 0,6
  • Cache-Control: макс возраста = 0
  • соединения: поддержания активности
  • Content-Length: 318
  • Content-Type: применение/х-WWW-форм-urlencoded
  • Cookie: язык = en_IN; __gads = J = 14c64d8f9fd7de54: Т = 1424658276: S = ALNI_Mba1kvJO4mLo7R-T2jUJE9zCYck5A; SLB_Cookie = ffffffff09461c2d45525d5f4f58455e445a4a422971; JSESSIONID = 36m4Oo6dCML_Wvx-Wgmm9rtLh9mbURxnZhWIVwg-zHaNzFQeUt9C -1989013783!; _ga = GA1.3.379900459.1428120216
  • Ведущий: www.irctc.co.in
  • Происхождение: https://www.example.com
  • Referer: https://www.example.com/context/home
  • Upgrade-небезопасной-запросов: 1
  • User-Agent: Mozilla/5.0 (Windows NT 10,0; WOW64) AppleWebKit/537,36 (KHTML, как 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, присутствующие в запросе. Поскольку веб-сайт не контролируется, я действительно не могу понять, в чем проблема.

Пожалуйста, помогите мне решить эту проблему. Любые указатели на решение проблемы на стороне клиента оцениваются. есть ли способ, которым мы можем убедиться, какой заголовок вызывает эту проблему.

+0

Похоже, что длина сообщения не требуется явно.Таким образом, это не похоже на длину содержимого – user2672763

+0

. Я вижу, что эта проблема может быть с параметрами представлений JSF. Форма, которую я отправляю, содержит скрытый параметр javax.faces.ViewState. Если удалить этот параметр из представления, я получу ту же страницу в ответ. С этим параметром я получаю 412. Еще вопрос - это то же самое, что и подстрока формы, отлично работает с браузером, но не с причала/apache httpclient – user2672763

ответ

0

Я решил проблему.

Проблема с параметром формы. Я отправлял закодированные значения, где они были закодированы клиентом причала снова