Історія про парсинг одного aspx сайту

Передісторія

Взагалі-то я верстальник. І веб-розробник, але в цій стороні скілл не настільки високий, лише роблю стерпні сайти на wordpress'і. З будь-якими суворими curl запитами до цього не стикалася. І з aspx сайтами теж. Але ж цікаво!(вилилося це в місяць вечорів з php і кілька безсонних ночей. І море задоволення, звичайно ж)

Спочатку були спроби кросдоменних запитів за допомогою JavaScript, але в цій стороні нічого не вийшло. Потім несміливі розкопки осторонь phantomjs та іншої емуляції поведінки користувача. Але, виявилося, що навичок js у мене все ж таки не вистачає. В результаті все працює на curl запитах, що йдуть від php сторінки.

Отримання інформації

Авторизація вийшла досить швидко, і заробила більш-менш без проблем.Самою неприємною проблемою виявилося обмеження за кількістю неправильних вводів пароля: двічі — і дзвони адміну, відновлюй доступ.

А ось із переходом на потрібне місто вперто не виходило. Перехід проводився, але кудись не туди, хоча запит POST був виконаний за всіма правилами. Виявилося, що preg_match некоректно працює з дуже великою кількістю символів. Від цього рятує вказівку директиви

Спочатку отримуємо початковий стан сторінки (оскільки ми ще не залогінені, то потрапляємо на сторінку логіна), і видираємо звідти viewstate:

Тепер, вже маючи на руках актуальний зліпок стану сторінки, вводимо логін та пароль. (postdata - це параметр POST запиту до сторінки, підглянути можна в тому ж firebug).

ми отримуємо ми отримуємо в результаті переглядудержави потрібної нам сторінки.

Саме на цьому моменті і виникала проблема з непрацюючим preg_replace, але рішення — дякую хабру — знайшлося. Є!Тепер можна переходити на заявки для потрібного міста та займатися вже парсингом.

Коли вже нарешті розумієш, що робиш, все досить просто: треба перейти саме за тим посиланням, перегляддержави якого отримали в минулому кроці.

Обробка інформації

Дісталися, починаємо парсити. Перший досвід був пов'язаний із регулярними виразами. На жаль, php на хостингу якось дуже дивно працював із багаторядковими висловлюваннями, і не видирав повністю select (з усіма option), як би я його не вмовляла (при цьому на локалці все працювало).

Гуглимо, думаємо, читаємо. Знаходимо Nokogiri. Ви знаєте, легко і стоїть! Дійсно швидка та приємна в роботі річ:

Краса та оформлення

Раптом з'явилася дуже дивна проблема: власне замовник із виразним невдоволенням користувався версією розробника без css, js та інших наворотів. Точніше, він взагалі не розумів, як цим можна користуватися.

Шукаємо інформацію про XHR-запити.

P.S. Ось тільки мене запитали, чи можна за допомогою цього клієнта змінювати дані в системі роботи із заявками. Схоже, це була загроза.

Хардкорна конфа за С++. Ми запрошуємо лише профі.