Сайт, опрашивающий чужой ресурс

Рейтинг: 0Ответов: 1Опубликовано: 07.07.2011

Я ничего подобного раньше не делал. Пытаюсь разобраться с нуля. Задача такая: написать код, который будет получать по таймеру информацию с чужого интернет-сайта. Про то, как устроен их сервер я ничего не знаю. Поэтому хотелось бы узнать, по какому алгоритму действовать? С помощью чего узнавать, как оно работает и какой запрос мне надо посылать? Реализовывать буду на javascript.

Теперь о том, что я уже попробовал сделать. Есть сайт для подачи заявки. Пользователь выбирает пункт Consulate General of Finland, St. Petersburg и нажимает "Отправить". Затем из элемента select пользователь выбирает цель визита, допустим, Tourism. В момент изменения выбранного пункта, появляется надпись: либо о том, что нет доступных дат (как чаще всего и бывает), либо выводит доступную дату. У этого элемента select есть такое свойство:

onchange="javascript:setTimeout('__doPostBack(\'ctl00$plhMain$cboVisaCategory\',\'\')', 0)"

Во вкладке Network панели разработчика видно, что отправляется post-запрос. В нём большую часть занимает так называемая "Form Data", содержание которой - нечитаемое сочетание символов. И еще: у запроса есть cookie, какой-то ASP_session. А также есть сайт, на котором такая задача уже сделана: http://visastat.ru. Собственно, узнав про него, я и решил в учебных целях разобраться, как это работает.

Ответы

▲ 4Принят

Всё же не совсем понятна цель. Ну да ладно.

Если бы речь шла о том, как делать периодический опрос своего ресурса, то тут надо использовать AJAX. На эту тему очень много информации. Начать можно, например, с Ajax In Action (AJAX в действии). Она уже начинает устаревать, но всё ещё актуальна и для обучения сгодится.

Когда же речь идёт об опросе чужого ресурса, то тут AJAX не годится. Главная причина - security policy, которое не позволяет делать запросы к чужим ресурсам. Выхода в данной ситуации два: проксирование на вашем сервере, либо использование скрытого iframe. При первом подходе на клиентской стороне вы сможете использовать обычный AJAX. Также у вас будет больше контроля за процессом. Второй путь не требует ничего от вашей серверной стороны, но вызовет ряд сложностей по управлению загрузкой в iframe в разных браузерах. Среди проблем, например, невозможность обнаружить неожиданный обрыв связи во время загрузки данных.

Учитывая разные плюсы и минусы, вам следует выбрать удобный для вас путь.

В данном случае, у вас также имеется некий ресурс и вам надо понять, что именно надо туда передать, чтобы всё заработало и надо понять, что он вернёт в качестве ответа. К сожалению, может оказаться, что просто нереально узнать это. Если не удастся найти никакой документации о том, что же там происходит, то можно применить реверс-инжиниринг: попытаться разгадать, что же значат передаваемые сведения в разных случаях. Можно также попытаться отформатировать JavaScript того сайта, который уже умеет работать с этими данными и попытаться разобраться в нём. В целом, я не уверен, что подобные раскопки - полезное времяпровождение и образовательный эффеки будет минимальным.