Из этого руководства вы узнаете:
- Что такое cURL Impersonate
- Причины проекта и принципы его работы
- Как использовать его через командную строку
- Как использовать его в Python
- Передовые методы и аспекты
Давайте рассмотрим это подробнее!
Что такое cURL Impersonate?
cURL Impersonate — это специальная сборка cURL, предназначенная для имитации поведения основных браузеров (например, Chrome, Edge, Safari и Firefox). В частности, этот инструмент выполняет подтверждение установления связи по протоколам TLS и HTTP, очень похожее на подтверждение установления связи в реальных браузерах.
HTTP-клиент можно использовать либо с помощью инструмента командной строки curl-impersonate
, аналогичного обычному curl
, либо в виде библиотеки на Python.
Вот браузеры, за которые он может выдавать себя:
Браузер | Симулированная ОС | Wrapper Script |
Chrome 99 | Windows 10 | curl_chrome99 |
Chrome 100 | Windows 10 | curl_chrome100 |
Chrome 101 | Windows 10 | curl_chrome101 |
Chrome 104 | Windows 10 | curl_chrome104 |
Chrome 107 | Windows 10 | curl_chrome107 |
Chrome 110 | Windows 10 | curl_chrome110 |
Chrome 116 | Windows 10 | curl_chrome116 |
Chrome 99 | Android 12 | curl_chrome99_android |
Edge 99 | Windows 10 | curl_edge99 |
Edge 101 | Windows 10 | curl_edge101 |
Firefox 91 ESR | Windows 10 | curl_ff91esr |
Firefox 95 | Windows 10 | curl_ff95 |
Firefox 98 | Windows 10 | curl_ff98 |
Firefox 100 | Windows 10 | curl_ff100 |
Firefox 102 | Windows 10 | curl_ff102 |
Firefox 109 | Windows 10 | curl_ff109 |
Firefox 117 | Windows 10 | curl_ff117 |
Safari 15.3 | macOS Big Sur | curl_safari15_3 |
Safari 15.5 | macOS Monterey | curl_safari15_5 |
В каждом поддерживаемом браузере есть свой скрипт-оболочка. Он позволяет настроить curl-impersonate
с использованием соответствующих заголовков, флагов и настроек для имитации конкретного браузера.
Как работает curl-impersonate
При отправке запроса на веб-сайт по протоколу HTTPS происходит процесс под названием TLS handshake (подтверждение установления связи по TLS). Во время этого процесса сведения о HTTP-клиенте передаются веб-серверу, в результате чего создается уникальный отпечаток TLS .
Возможности и конфигурации HTTP-клиентов отличаются от стандартных браузеров. Это несоответствие приводит к созданию отпечатка TLS, который может легко выявить использование HTTP-клиентов. В результате антибот-меры, используемые целевым сайтом, могут распознать ваши запросы как автоматизированные и потенциально заблокировать их.
cURL Impersonate решает эту проблему, изменяя стандартный инструмент curl
так, чтобы его отпечаток TLS соответствовал отпечатку реальных браузеров. Вот как достигается эта цель:
- Модификация библиотеки TLS: для версии
curl-impersonate
для Chrome ,curl
компилируется с помощью BoringSSL, библиотеки Google TLS. В версии Firefoxcurl
скомпилирован с помощью NSS — библиотеки TLS, используемой Firefox. - Корректировка конфигурации: cURL Impersonate изменяет то, как cURL настраивает различные расширения TLS и опции SSL для имитации настроек реальных браузеров. Также добавлена поддержка новых расширений TLS, которые обычно используются браузерами.
- Настройка подтверждения установления связи HTTP/2: cURL Impersonate изменяет настройки, используемые cURL для соединений HTTP/2, в соответствии с настройками реальных браузеров.
- Флаги, отличные от стандартных: cURL Impersonate работает с определенными флагами, отличными от стандартных, такими как
--ciphers
,--curves
, и некоторыми заголовками -H, что дополнительно помогает имитировать поведение браузера.
Таким образом, благодаря curl-impersonate
запросы curl
выглядят с точки зрения сети так, как если бы они были сделаны настоящим браузером. Это полезно для обхода многих механизмов обнаружения ботов!
curl-impersonate: учебное пособие по командной строке
Выполните следующие шаги, чтобы узнать, как использовать cURL Impersonate из командной строки.
Примечание: для полноты информации будет отображено несколько способов установки. Однако вам нужно выбрать только один. Рекомендуемый метод — использование Docker.
Установка из предварительно скомпилированных двоичных файлов
Предварительно скомпилированные двоичные файлы для Linux и macOS можно загрузить со страницы проекта GitHub releases. Эти двоичные файлы содержат статически скомпилированный curl-impersonate
. Перед их использованием убедитесь, что у вас установлено следующее:
- NSS (Службы сетевой безопасности): набор библиотек, предназначенных для поддержки кроссплатформенной разработки клиентских и серверных приложений с поддержкой безопасности. NSS используется в продуктах Mozilla, таких как Firefox и Thunderbird, для обработки протокола TLS.
- Сертификаты CA: набор цифровых сертификатов, удостоверяющих подлинность серверов и клиентов во время защищенной связи. Они гарантируют надежность подключения к серверу, проверяя, что сертификат сервера подписан признанным УЦ (удостоверяющий центр).
Чтобы выполнить необходимые требования, запустите в Ubuntu:
sudo apt install libnss3 nss-plugin-pem ca-certificates
В Red Hat, Fedora или CentOS выполните следующее:
yum install nss nss-pem ca-certificates
В Archlinux запустите:
pacman -S nss ca-certificates
В macOS выполните следующую команду:
brew install nss ca-certificates
Кроме того, убедитесь, что в вашей системе установлено zlib
, так как предварительно скомпилированные двоичные пакеты архивируются gzip.
Установка через Docker
Образы Docker на основе Alpine Linux и Debian со скомпилированными и готовыми к использованию образы Curl-impersonate доступны на Docker Hub. Эти образы включают двоичный файл и все необходимые скрипты-оболочки.
Изображения Chrome (*-chrome
) могут имитировать Chrome, Edge и Safari. Вместо этого изображения Firefox (*-ff
) могут выдавать себя за Firefox.
Чтобы загрузить предпочтительный образ Docker, используйте одну из приведенных ниже команд.
Для версии Chrome на Alpine Linux:
docker pull lwthiker/curl-impersonate:0.5-chrome
Для версии Firefox на Alpine Linux:
docker pull lwthiker/curl-impersonate:0.5-ff
Для версии Chrome на Debian:
docker pull lwthiker/curl-impersonate:0.5-chrome-slim-buster
Для версии Firefox на Debian:
docker pull lwthiker/curl-impersonate:0.5-ff-slim-buster
После загрузки, как вы сейчас увидите, вы можете выполнить curl-impersonate
с помощью команды docker run.
Установка из дистрибутивов
В Arch Linux curl-impersonate
доступно в AUR-пакете curl-impersonate-bin
.
В macOS вы можете установить неофициальный пакет Homebrew для версии Chrome с помощью следующих команд:
brew tap shakacode/brew
brew install curl-impersonate
Базовое использование
Независимо от способа установки, теперь вы можете выполнить команду curl-impersonate
, используя следующий синтаксис:
curl-impersonate-wrapper [options] [target-url]
Или, что эквивалентно, в Docker запустите что-нибудь вроде:
docker run --rm lwthiker/curl-impersonate:[curl-impersonate-version]curl-impersonate-wrapper [options] [target_url]
Где:
curl-impersonate-wrapper
— это оболочка, которую вы хотите использовать (например,curl_chrome116
,curl_edge101
,curl_ff117
,curl_safari15_5
и т. д.).options
— это необязательные флаги, которые будут переданы в cURL.target-url
— это URL-адрес веб-страницы, к которой нужно сделать HTTP-запрос.
При указании пользовательских опций будьте осторожны, поскольку некоторые флаги изменяют подпись TLS cURL и могут сделать ее обнаруживаемой. Чтобы узнать больше, ознакомьтесь с нашим введением в CURL.
Обратите внимание, что оболочки автоматически устанавливают набор HTTP-заголовков по умолчанию. Чтобы настроить эти заголовки, измените сценарии оболочки в соответствии со своими потребностями.
Теперь давайте используем curl-impersonate
, чтобы отправить запрос на домашнюю страницу «Википедии» с помощью оболочки Chrome:
curl_chrome110 https://www.wikipedia.org
Или, если вы являетесь пользователем Docker:
docker run --rm lwthiker/curl-impersonate:0.5-chrome curl_chrome110 https://www.wikipedia.org
Результат будет следующим:
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<title>Wikipedia</title>
<meta name="description" content="Wikipedia is a free online encyclopedia, created and edited by volunteers around the world and hosted by the Wikimedia Foundation.">
<!-- omitted for brevity... -->
Замечательно! Сервер вернул HTML-код нужной страницы, как если бы вы обращались к ней через браузер.
Теперь можно использовать cURL Impersonate для парсинга веб-страниц точно так же, как использовать cURL для веб-парсинга.
curl-impersonate
: руководство по Python
Использование командной строки отлично подходит для тестирования, но процессы веб-парсинга обычно основаны на пользовательских скриптах, написанных на таких языках, как Python. Откройте для себя лучшие языки программирования для веб-парсинга!
К счастью, вы можете использовать cURL Impersonate в Python благодаря curl-cffi
. Это привязка Python для curl-impersonate
через cffi
. В частности, curl-cffi
может выдавать себя за отпечатки браузеров TLS/JA3 и HTTP/2 для подключения к веб-страницам без получения бана.
Узнайте, как использовать этот инструмент, в разделе с пошаговыми инструкциями ниже!
Предварительные условия
Прежде чем начать, убедитесь, что у вас есть:
- Python 3.8+, установленный на вашем компьютере;
- проект Python с настроенной виртуальной средой.
При желании рекомендуется использовать среду разработки Python, например Visual Studio Code с расширением Python.
Установка
Установите curl_cfii
через pip следующим образом:
pip install curl_cfii
Использование
curl_cffi
предоставляет как низкоуровневый API curl
, так и высокоуровневый API, похожий на requests. Узнайте подробнее в официальной документации .
Обычно вы хотите использовать API, похожий на запросы. Для этого импортируйте requests
из curl_cffi
:
from curl_cffi import requests
Теперь вы можете использовать версию cURL Impersonate для Chrome на Python для подключения к веб-странице с помощью:
response = requests.get("https://www.wikipedia.org", impersonate="chrome")
Print the response HTML with:
print(response.text)
Put it all together, and you will get:
from curl_cffi import requests
# make a GET request to the target page with
# the Chrome version of curl-impersonate
response = requests.get("https://www.wikipedia.org", impersonate="chrome")
# print the server response
print(response.text)
Run the above Python script, and it will print:
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<title>Wikipedia</title>
<meta name="description" content="Wikipedia is a free online encyclopedia, created and edited by volunteers around the world and hosted by the Wikimedia Foundation.">
<!-- omitted for brevity... -->
Прекрасно! Теперь можно выполнять веб-парсинг на Python, как и с помощью Requests и Beautiful Soup. Для получения дополнительных рекомендаций следуйте нашему руководству по веб-парсингу с помощью Python.
Продвинутое использование cURL Impersonate
Пора изучить некоторые продвинутые способы и методы использования этого инструмента!
Интеграция прокси
Имитации отпечатков браузера может оказаться недостаточно. Антибот-решения могут по-прежнему блокировать вас, особенно если вы делаете слишком много автоматических запросов за короткий промежуток времени. Вот тут-то и пригодятся прокси-серверы.
Направив запрос через прокси-сервер , вы можете получить новый IP-адрес и скрыть свою личность.
Предположим, что URL-адрес вашего прокси-сервера:
http://84.18.12.16:8888
cURL Impersonate поддерживает интеграцию прокси через командную строку с использованием флага -x:
curl-impersonate -x http://84.18.12.16:8888 https://httpbin.org/ip
Подробнее читайте в руководстве «Как настроить прокси в cURL».
В Python вы можете настроить прокси-сервер так же, как и в случае с requests
:
from curl_cffi import requests
proxies = {"http": "http://84.18.12.16:8888", "https": "http://84.18.12.16:8888"}
response = requests.get("https://httpbin.org/ip", impersonate="chrome", proxies=proxies)
Дополнительные сведения см. в разделе: «Как интегрировать прокси-сервер с Python requests».
Интеграция с Libcurl
libcurl-impersonate — это скомпилированная версия libcurl
, имеющая те же функции, что и cURL Impersonate. Он также предлагает расширенный API для настройки деталей TLS и конфигураций заголовков.
libcurl-impersonate
можно установить с помощью предварительно скомпилированного пакета. Цель этого инструмента — облегчить интеграцию cURL Impersonate в библиотеки на различных языках программирования, такие как пакет Python curl-cffi
.
Заключение
Из этой статьи вы узнали, что представляет собой инструмент cURL Impersonate, как он работает и как его использовать как через интерфейс командной строки, так и в Python. Теперь вы понимаете, что это инструмент для выполнения HTTP-запросов, имитируя отпечаток TLS в реальных браузерах.
Проблема в том, что передовые антибот-решения, такие как Cloudflare, все же могут распознавать ваши запросы как исходящие от бота. Каково решение? Scraper APIот Bright Data — комплексное решение нового поколения для парсинга данных «все в одном».
Scraper API предоставляет все необходимое для выполнения автоматических веб-запросов с использованием cURL или любого другого HTTP-клиента. Это полнофункциональное решение позволяет снимать отпечатки браузеров, распознавать капчу и ротировать IP-адреса, чтобы вы могли обойти любые антибот-технологии. Создавать автоматические HTTP-запросы еще никогда не было так просто!
Зарегистрируйтесь сейчас, чтобы получить бесплатную пробную версию инфраструктуры для очистки веб-страниц Bright Data или поговорите с одним из наших экспертов по данным о наших решениях для очистки данных.
Кредитная карта не требуется