Пара уточнений к транспортной части, обе из документации
impersonate="chrome124" лучше заменить на impersonate="chrome" - в curl_cffi это алиас на актуальную версию, он обновляется вместе с библиотекой. Пинить конкретную версию есть смысл только там, где нужна воспроизводимость замера: фингерпринт Chrome 124 при живом Chrome 14x сам по себе аномалия - старый браузер, который почему-то ходит по интеу)
Второе, менее заметное как мне каж. r.status_code == 200 не значит, что вы получили страницу. Cloudflare документирует ровно один надёжный признак челленджа: заголовок cf-mitigated: challenge, он присутствует независимо от типа челленджа, и content-type у челленджа всегда text/html. Статус-код при этом ни к чему не привязан. Без такой проверки success rate парсера считается по страницам-заглушкам, и чем лучше работает impersonate, тем незаметнее ошибка https://developers.cloudflare.com/cloudflare-challenges/challenge-types/challenge-pages/detect-response/
Пара уточнений к транспортной части, обе из документации
impersonate="chrome124"лучше заменить наimpersonate="chrome"- в curl_cffi это алиас на актуальную версию, он обновляется вместе с библиотекой. Пинить конкретную версию есть смысл только там, где нужна воспроизводимость замера: фингерпринт Chrome 124 при живом Chrome 14x сам по себе аномалия - старый браузер, который почему-то ходит по интеу)Второе, менее заметное как мне каж.
r.status_code == 200не значит, что вы получили страницу. Cloudflare документирует ровно один надёжный признак челленджа: заголовокcf-mitigated: challenge, он присутствует независимо от типа челленджа, и content-type у челленджа всегдаtext/html. Статус-код при этом ни к чему не привязан. Без такой проверки success rate парсера считается по страницам-заглушкам, и чем лучше работает impersonate, тем незаметнее ошибкаhttps://developers.cloudflare.com/cloudflare-challenges/challenge-types/challenge-pages/detect-response/