Тема 3: Сетевые протоколы: HTTP/1.1 vs HTTP/2 vs WebSockets. Почему сайт может банить за неправильную версию протокола?
Ты можешь написать идеальный код, подобрать User-Agent от последнего Айфона, но сервер все равно пошлет тебя нахер (403 Forbidden). Почему? Потому что ты стучишься в дверь как динозавр.
Протокол — это язык общения. Если ты говоришь на старославянском (HTTP/1.1) с хипстерами (Cloudflare), они сразу понимают: "Дед, пей таблетки, ты бот на питоне".
1. HTTP/1.1 — "Дедовский метод"
Это стандарт 1999 года.
- Как работает: Текстовый формат. Один запрос — одно соединение (грубо говоря). Блокирует очередь.
- Кто использует: Библиотека
requests. Да, стандартная библиотекаrequestsне умеет в HTTP/2. Вообще. - Проблема: Современные браузеры (Chrome, Safari) ВСЕГДА используют HTTP/2 или HTTP/3, если сервер позволяет.
- Детект: Если сервер видит запрос от "Chrome 120", но по протоколу HTTP/1.1 — это красный флаг. Это 99% бот.
- Когда юзать: На старых, дырявых сайтах, государственных порталах, где админы сами живут в 90-х.
2. HTTP/2 — "Скоростная магистраль"
Это бинарный протокол.
- Как работает:
- Мультиплексирование: По одному соединению летят сразу 100 запросов параллельно (картинки, стили, JSON).
- Сжатие заголовков (HPACK): Заголовки сжимаются, трафик меньше.
- Кто использует: Браузеры. И библиотека
httpx(если включить флаг). - Зачем парсеру:
- Скорость: Реально быстрее на большом количестве мелких запросов.
- Мимикрия (Самое важное): Включение HTTP/2 делает твой скрипт похожим на реальный браузер. Cloudflare меньше агрится.
-
Как включить:
3. WebSockets (WS/WSS) — "Прямой эфир"
Это вообще другая история. Это не "запрос-ответ", это "труба".
- Как работает: Ты один раз соединяешься (
Handshake), и канал остается открытым. Сервер сам присылает тебе сообщения (пуши), когда хочет. Тебе не надо долбить его запросами "Ну что, цена изменилась?". - Где живет:
- Биржи (Binance, MOEX) — котировки летят в реалтайме.
- Букмекеры — коэффициенты меняются каждую секунду.
- Чаты — сообщения.
- Как парсить: Обычный
httpx.getтут не сработает. Тебе нужна библиотекаwebsocketsилиaiohttpи бесконечный циклwhile True, который слушает трубу. -
Пример:
🕵️♂️ Резюме архитектора: Как не спалиться на протоколе?
- Забудь про
requestsна защищенных сайтах. Использованиеrequests(HTTP/1.1) с User-Agent от Chrome — это выстрел себе в ногу. Это главная причина тупых банов. - Юзай
httpxсhttp2=True. Это дешевый способ повысить "траст" (доверие) к твоему скрипту. - Видишь "Live" данные? Ищи WebSockets.
Если цифры на сайте бегут, а в
Network -> Fetch/XHRтишина — иди во вкладкуWS. Там льется чистый поток данных, который даже парсить не надо, просто читай JSON.
Блок 1 (Теория жертвы) закрыт. Мы разобрали Типы сайтов, Скрытые данные и Протоколы. Теперь у тебя есть понимание "Куда мы лезем".