Как программно повторить форму POST-запроса

Когда я захожу на сайт http://www.jetstar.com/au/en/home

И заполните форму, затем отправьте.

Он отправит запрос POST, а затем перенаправит меня на новую страницу с ценой билета (HTML).

Я могу получить ожидаемый результат во втором ответе GET

Однако, когда я пытаюсь повторить запрос POST с помощью Ruby или Charles

Я получаю сообщение об ошибке 302 Found.

Я не понимаю.

Рубин

q_prams = {  
   "ControlGroupSearchView$AvailabilitySearchInputSearchView$DropDownListFareTypes"   =>"I",
   "ControlGroupSearchView$AvailabilitySearchInputSearchView$DropDownListMarketDay1"   =>"9",
   ~~~
   "pageToken"   =>"sLkmnwXwAsY=",
   "ControlGroupSearchView$AvailabilitySearchInputSearchView$fromCS"   =>"yes"
}

res = RestClient.post 'https://booknow.jetstar.com/Search.aspx', q_prams

Параметры POST-запроса

ControlGroupSearchView%24AvailabilitySearchInputSearchView%24DropDownListCurrency=&ControlGroupSearchView%24AvailabilitySearchInputSearchView%24DropDownListFareTypes=I&ControlGroupSearchView%24AvailabilitySearchInputSearchView%24DropDownListMarketDay1=18&ControlGroupSearchView%24AvailabilitySearchInputSearchView%24DropDownListMarketDay2=1&ControlGroupSearchView%24AvailabilitySearchInputSearchView%24DropDownListMarketDay3=&ControlGroupSearchView%24AvailabilitySearchInputSearchView%24DropDownListMarketMonth1=2015-6&ControlGroupSearchView%24AvailabilitySearchInputSearchView%24DropDownListMarketMonth2=1968-1&ControlGroupSearchView%24AvailabilitySearchInputSearchView%24DropDownListMarketMonth3=&ControlGroupSearchView%24AvailabilitySearchInputSearchView%24DropDownListPassengerType_ADT=1&ControlGroupSearchView%24AvailabilitySearchInputSearchView%24DropDownListPassengerType_CHD=0&ControlGroupSearchView%24AvailabilitySearchInputSearchView%24DropDownListPassengerType_INFANT=0&ControlGroupSearchView%24AvailabilitySearchInputSearchView%24RadioButtonMarketStructure=OneWay&ControlGroupSearchView%24AvailabilitySearchInputSearchView%24TextBoxMarketDestination1=MEL&ControlGroupSearchView%24AvailabilitySearchInputSearchView%24TextBoxMarketDestination2=&ControlGroupSearchView%24AvailabilitySearchInputSearchView%24TextBoxMarketDestination3=&ControlGroupSearchView%24AvailabilitySearchInputSearchView%24TextBoxMarketOrigin1=NAN&ControlGroupSearchView%24AvailabilitySearchInputSearchView%24TextBoxMarketOrigin2=&ControlGroupSearchView%24AvailabilitySearchInputSearchView%24TextBoxMarketOrigin3=&ControlGroupSearchView%24ButtonSubmit=&__VIEWSTATE=&culture=en-AU&date_picker=&go-booking=&pageToken=sLkmnwXwAsY%3D&ControlGroupSearchView%24AvailabilitySearchInputSearchView%24fromCS=yes&_pe_39b5379c652b_9df496572198=null&locale=en-AU

Первый ответ (УСПЕХ), но кошка не повторяет его программно

<!doctype html><!--paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/--><!--[if lt IE 7 ]> <html lang="en" class="no-js ie6"> <![endif]--><!--[if IE 7 ]>    <html lang="en" class="no-js ie7"> <![endif]--><!--[if IE 8 ]>    <html lang="en" class="no-js ie8"> <![endif]--><!--[if IE 9 ]>    <html lang="en" class="no-js ie9"> <![endif]--><!--[if (gt IE 9)|!(IE)]><!--><html lang="en" class="no-js"><!--<![endif]--><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<head class="SB">
  <META http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Jetstar Airways Cheap Flights, Low Fares all day everyday from the world's best Cheap Fare airline</title>
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  <link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
  <link rel="icon" href="favicon.ico" type="image/ico">
  <link rel="SHORTCUT ICON" href="favicon.ico">
...

person newBike    schedule 30.05.2015    source источник
comment
302 — это не код ошибки, это перенаправление HTTP. Куда вас перенаправляет сервер? Это может дать подсказку.   -  person digidigo    schedule 30.05.2015


Ответы (1)


Скорее всего, это связано с тем, что CSRF verification пользователи Сайтов CSRF проверяют запрос, чтобы убедиться, что отправка формы поступила с того же сайта.

В вашем случае вы пытаетесь отправить форму из другого источника, и, следовательно, проверка не проходит.

Если вы хотите сделать вышеперечисленное, я решу сделать очистку экрана с помощью такой библиотеки, как capybara.

подробнее о CSRF читайте здесь

person sameera207    schedule 30.05.2015