diff --git a/public/uk/bypass-js-cookies-anti-bot-on-website-dump-with-wget.gmi b/public/uk/bypass-js-cookies-anti-bot-on-website-dump-with-wget.gmi new file mode 100644 index 0000000..2b0fec8 --- /dev/null +++ b/public/uk/bypass-js-cookies-anti-bot-on-website-dump-with-wget.gmi @@ -0,0 +1,85 @@ +# Копіювання Веб-сайту з обходом анти-бот захисту через wget + +В рамках проєкту з реставрації українських Веб-архівів, я періодично роблю "сирі" дампи деяких Веб-сайтів, на випадок їх зникнення з онлайну. Утім один з ресурсів, який мене зацікавив (https://prolinux.pp.ua/news/prolinuxua-stopped.html) - використовував динамічний анти-бот захист на основі JavaScript + Cookies, перший з яких утиліта wget обробляти не вміє, через що цей сайт також не може проіндексуватись проєктом Web-archive: +=> https://web.archive.org/web/20231130201641/https://prolinux.pp.ua/?i=1 + +Тобто у цьому випадку, його сторінка віддає кравлеру наступний код, точніше логічне завдання для клієнт-сайду, результат якого потрібно зберегти до Cookies та застосувати для подальших запитів: + +``` html + +``` + +Колись я вже мав подібний досвід (з логінами), тому швидко знайшов рішення для цього сайту і написав відповідний гайд: +=> https://codeberg.org/uarchive/prolinux.pp.ua#readme + +За одно вирішив поділитись рішенням і тут, адже принцип роботи може бути корисним не тільки для архівації, але якщо ви хочете отримати копію сайту для читання в офлайн а той - має схожі заморочки. + +Це звісно не є універсальним рішенням, якщо сайт не віддає сторінки без JavaScript в принципі (що в плані SEO сьогодні зустрічається рідко) або використовуються якісь інші, більш складні алгоритми, наприклад на основі майнингу типу Anubis: +=> https://github.com/TecharoHQ/anubis + +## wget + +Типова команда для отримання локальної копії звичайного сайту виглядає наступним чином: + +``` bash +wget -e robots=off\ + --recursive\ + --timestamping\ + --page-requisites\ + --convert-links\ + --adjust-extension\ + --reject="*/feed"\ + --user-agent="VALUE" + --load-cookies="path/to/cookies.txt"\ + --no-check-certificate\ + https://prolinux.pp.ua/ +``` +* `-e robots=off` - ігнорувати правила `robots` +* `--recursive` - режим кравлера +* `--timestamping` - завантажити файли лише в тому випадку, якщо вони новіші, аніж локальні +* `--page-requisites` - завантажити елементи, необхідні для коректного відображення веб-сторінки (CSS, JavaScript, медіа) +* `--convert-links` - конвертувати посилання у відносний формат для читання офлайн (з локальних файлів) +* `--adjust-extension` - додавати відповідні розширення, наприклад `.html` +* `--reject="*/feed"` - локальне правило виключно для цього сайту +* у випадку саме цього сайту я вказую `https` з `--no-check-certificate` бо сертифікат прострочений а посилання ведуть саме на SSL версію +* про значення аргументів `--user-agent` і `--load-cookies` - нижче + +Оскільки даний хостинг (або програмне забезпечення сайту) використовує захист JavaScript з використанням випадкового значення Cookies, потрібно спочатку згенерувати його, перейшовши на головну сторінку сайту програмою, яка це все "розуміє" наприклад, через Firefox. + +### --load-cookies + +Тут потрібно "витягнути" згенеровані Cookies у форматі "Netscape HTTP Cookie File" для подальшого використання з `--load-cookies`. +Для Firefox найпростіше це зробити скриптом: +=> https://gist.githubusercontent.com/hackerb9/d382e09683a52dcac492ebcdaf1b79af/raw/fcc8dcc0b8c3ca1d81e5ba2fb8d4f346dfe0a511/extract_cookies.sh + +``` bash +chown +x extract_cookies.sh +extract_cookies.sh > cookies.txt +``` +* опціонально, з цього файлу можна видалити все, що не співпадає з хостом у прикладі - `prolinux.pp.ua` + +В принципі, можна й без скрипта вище руками зкопіювати значення вкладки, якщо не боїтесь помилитись з синтаксисом (Ctrl+Shift+i > Storage > Cookies) + +``` cookies.txt +# Netscape HTTP Cookie File +prolinux.pp.ua FALSE / FALSE 1758187902409 __test c2343463c82123417efd87dadb45678 +``` + +### --user-agent + +Для wget важливо вказати такий само `--user-agent` яким було отримано значення Cookies. Тут можна ввести в Google запит: +=> https://www.google.com/search?q=get+current+user+agent+online +для Firefox, там виводиться рядок типу: +``` +Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0 +``` + +## P.S. + +Як бачите, у конкретно цьому випадку - все відносно просто, якщо зрозуміти принцип взаємодії Cookies з wget, то можна легко застосувати дану логіку й для схожих завдань. Тут, саму команду імпорту можна трохи адаптувати, бо в мене чомусь не замінились посилання на відносні, але мова тут не про них і я виправлю їх вже мабуть локальною авто-заміною (мені так простіше). + +Оскільки я не впевнений чи варто розміщувати дані цього сайту на Codeberg, можливо хтось доєднається і створить в себе додаткову локальну копію за прикладом вище і коли автор блогу повернеться - ми зможемо таким чином підстрахувати його роботи від втрати даних. + +## Посилання + +=> https://devzone.org.ua/post/kopiiuvannia-veb-saytu-z-obkhodom-anty-bot-zakhystu-z-wget Веб-версія цього матеріалу з коментарями на DevZone \ No newline at end of file diff --git a/public/uk/index.gmi b/public/uk/index.gmi index 3dd1089..7b66941 100644 --- a/public/uk/index.gmi +++ b/public/uk/index.gmi @@ -9,6 +9,7 @@ ### Нотатки +=> bypass-js-cookies-anti-bot-on-website-dump-with-wget.gmi 2025-09-18 Копіювання Веб-сайту з обходом анти-бот захисту через wget => setup-anonymous-ftp-server.gmi 2025-09-17 Організація гостьового сервера FTP => my-alfis-dns-preset-on-yggdrasil-mycelium-router.gmi 2025-09-17 Мій пресет Alfis DNS на роутері Yggdrasil / Mycelium => install-mycelium-network-router-in-linux.gmi 2025-09-16 Встановлення роутера мережі Mycelium в Linux