CoderCastrov logo
CoderCastrov
Парсер

Дневник добродушного хакера: Часть 4

Дневник добродушного хакера: Часть 4
просмотров
2 мин чтение
#Парсер
Table Of Content

    ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Эта статья переведена с частного блога китайского хакерского сообщества. Автор перевода не несет ответственности за содержание оригинальной статьи.

    Видеть веб-страницу в своем браузере означает, что вы также можете ее сохранить. Таким образом, не существует "нескрапабельных" веб-сайтов. Но есть много трудно скрапабельных.

    Однажды мне поступил запрос на получение списка парковок для электромобилей или зон зарядки (зеленые точки на карте) Баварии. (https://ladeatlas.elektromobilitaet-bayern.de)

    Сначала я посмотрел на структуру HTML, чтобы увидеть, можно ли быстро его разобрать. Не вариант... Он работал на основе Google, поэтому показывал некоторые изображения вместо фактического контента.

    Затем я перешел на вкладку "Сеть" и нашел запрос к сервису вместе с другим мусором, который загружался. Это был POST-запрос к getObjects.php, довольно интуитивно, не так ли.

    Я скопировал заголовки, куки, вставил их в свой скрипт и попробовал в первый раз. Ничего! Через несколько минут я понял, что пропустил полезную нагрузку запроса. Когда вставил ее, у меня появилось плохое предчувствие...

    На этот раз запрос прошел гладко, но мои предположения оправдались. Как и в запросе, данные ответа также были неразборчивыми. Это не могло быть из-за сжатия/распаковки, так как Python автоматически разрешает это. Я попробовал все доступные алгоритмы кодирования или шифрования, но безуспешно. Хорошо сработано, разработчики, вы выиграли на этот раз - подумал я...

    После нескольких чашек кофе и нескольких злых песен я вернулся к Ladeatlas. Я нашел точное место в JavaScript, где вызывается этот getObjects.php. В этот раз мне помогла вкладка "Stack Trace".

    Хотя скрипт был минимизирован и испорчен для чтения, было только вопросом времени, чтобы найти точное место, где этот ответ разбирается, и JSON-объект стал видимым.

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