Найти в Дзене
Full-News

Как быть, когда у сервиса нет API?

Приветствую, читатель! Сегодня мы поговорим о одной болезненной теме, когда у твоего любимого сервиса нет API, либо оно с ограничениями.
Всё что я приведу, может использоваться лишь в качестве примера, некоторые Веб-Приложения настроены категорически против ботов, уважайте труд чужих людей, заплатите за использование API.
Если всё же вам не нужен весь арсенал API и нужны редкие, но меткие запросы, можно реализовать это самому, имитируя поведение пользователя.
Ну что же, приступим!
В качестве примера я буду использовать сервис online-convert. Мне приходилось парсить один табличных PDF файл и только online-convert прекрасно справлялся с этим, но его бесплатного API мне не хватало, а платить было жалко, ибо этот проект был на время. Пришлось потеть.
Открыв окно разработки и зайдя на вкладку "Сеть", я нашел запрос, который отправлялся для конвертирования файла. Найдя все параметры, я понял то, что без CSRF токена сервер отказывается запускать обработку файла. Нашел CSRF в форме с по

Приветствую, читатель! Сегодня мы поговорим о одной болезненной теме, когда у твоего любимого сервиса нет API, либо оно с ограничениями.

Всё что я приведу, может использоваться лишь в качестве примера, некоторые Веб-Приложения настроены категорически против ботов, уважайте труд чужих людей, заплатите за использование API.

Если всё же вам не нужен весь арсенал API и нужны редкие, но меткие запросы, можно реализовать это самому, имитируя поведение пользователя.

Ну что же, приступим!

В качестве примера я буду использовать сервис online-convert. Мне приходилось парсить один табличных PDF файл и только online-convert прекрасно справлялся с этим, но его бесплатного API мне не хватало, а платить было жалко, ибо этот проект был на время. Пришлось потеть.

Открыв окно разработки и зайдя на вкладку "Сеть", я нашел запрос, который отправлялся для конвертирования файла. Найдя все параметры, я понял то, что без CSRF токена сервер отказывается запускать обработку файла. Нашел CSRF в форме с помощью "Инспектора", отправил запрос Curl, всё работает. Прекрасно. Осталось динамически получать этот CSRF_Token. Обновив страницу, я заметил, что он остался точно таким же, каким и был. Посмотрев запрос на эту страницу (С формой), я увидел в Cookie OC_PHPSESSID, который и отвечал за сессию и один и тот же CSRF_Token.

Прекрасно, всё сошлось.

При первом посещении сайта, в Cookie приходит OC_PHPSESSID, а после, когда мы заходим на любую страницу с формой, вместе с ней приходит CSRF токен.

Значит, нужно выполнить такой алгоритм:
1. Отправить GET запрос на главную страницу.
1.1. Сохранить OC_PHPSESSID.
2. Отправить GET запрос на страницу с формой, вместе с OC_PHPSESSID.
2.1. Сохранить CSRF_Token с формы.
3. Отправить запрос на сервер с CSRF токеном и OC_PHPSESSID.

Звучит легко, хотя так оно и есть.

Код: https://paiza.io/projects/hvRa-6QUE7TZvW0z7IYofg?language=javascript

Также, Captcha достаточно легко обходится благодаря NordVPN. Достаточно выполнить в консоли одну команду, после отрицательного ответа сервера, а после её завершения, попробовать снова.

Надеюсь, вам никогда не пригодится данная информация и у вас будет только четко документированный REST API! :)