Как использовать cURL с прокси: Полное руководство
Многие действия в интернете мы привыкли выполнять через браузер: читаем сайты, скачиваем файлы, заполняем формы или отправляем данные. Но знаете ли вы, что всё это можно делать быстрее прямо из командной строки? Один из лучших инструментов для этого — cURL.
cURL предоставляет больше контроля и удобства при необходимости обработать множество запросов или данных. А если использовать cURL вместе с прокси, возможности становятся ещё шире: можно обходить ограничения и оставаться анонимным.
В этой статье мы расскажем, как cURL помогает скачивать файлы, отправлять запросы и работать с прокси, чтобы обходить блокировки и защищать свою анонимность. Также разберём, как применять cURL для веб-скрапинга и избегать ошибок. Простые примеры и полезные советы — всё это ждёт вас далее!
Итак, cURL (Client URL) — это утилита на основе библиотеки libcurl, которая позволяет отправлять и получать данные через интернет. Она работает прямо из командной строки и поддерживает различные протоколы (HTTP, HTTPS для взаимодействия с веб-страницами, FTP для работы с файлами, и многие другие).
С помощью cURL можно делать разные вещи, например:
- Загружать файлы с интернета.
- Отправлять данные на сервер.
- Работать с веб-сайтами или программными интерфейсами.
- Использовать прокси-серверы для анонимности или обхода блокировок.
cURL помогает автоматизировать рутинные задачи, и делает это быстро и удобно, особенно если вам нужно выполнять много запросов или операций. cURL часто используется для тестирования, веб-скрапинга, а также для работы с сервисами и приложениями, которые требуют передачи данных через интернет. Он является мощным инструментом для разработчиков и системных администраторов, а также для любых пользователей, которым нужно работать с интернет-ресурсами из командной строки или скриптов.
Прокси (или прокси-сервер) — это посредник между вашим устройством и интернетом. Когда вы хотите зайти на сайт, ваш запрос сначала идет к прокси, который перенаправляет его на нужный сервер и возвращает вам ответ. Это помогает вам взаимодействовать с интернетом немного по-другому.
Вот несколько причин для использования прокси-серверов:
Скрытие вашего IP-адреса
Прокси может скрывать ваш реальный IP-адрес, так что сайты будут видеть не вас, а IP прокси-сервера. Это помогает повысить вашу анонимность в интернете.
Обход ограничений
Иногда интернет-ресурсы ограничивают доступ по регионам. С прокси вы можете обойти эти ограничения и получить доступ к контенту, который обычно недоступен в вашей стране.
Ускорение работы
Некоторые прокси-серверы могут запоминать (кэшировать) данные, что помогает ускорить загрузку сайтов, которые вы посещаете часто.
Фильтрация контента
Прокси можно настроить так, чтобы блокировать нежелательные сайты или защищать вас от вирусов и других угроз.
Дополнительная безопасность
Прокси помогает защититься от вредоносных сайтов и фишинговых атак, обеспечивая дополнительную прослойку безопасности.
Прокси бывают разных видов — HTTP, HTTPS, SOCKS и другие. Каждый тип прокси имеет свои особенности и способы применения в зависимости от ваших нужд. HTTP — используется для обычных веб-запросов, HTTPS — для безопасных, зашифрованных соединений, а SOCKS — универсальный прокси, который может передавать любой тип трафика, включая HTTP и HTTPS. Давайте более подробно узнаем о них в следующем разделе.
Выбор прокси зависит от ваших целей, задач и требований к производительности или анонимности. Рассмотрим основные типы прокси и для чего лучше всего их использовать:
HTTP/HTTPS Прокси
HTTP-прокси работает только с HTTP/HTTPS-протоколами, обеспечивает дополнительное шифрование, что делает его более безопасным.
Широко поддерживается большинством инструментов и программ. Отлично подходит для веб-скрейпинга и других задач, требующих автоматизации.
SOCKS-прокси (SOCKS4 и SOCKS5)
SOCKS5 поддерживает как TCP, так и UDP-трафик.
Работает на более низком уровне, чем HTTP-прокси, что делает его универсальным для любых протоколов.
SOCKS-прокси не обрабатывает заголовки, что повышает анонимность.
Для задач, где важна высокая анонимность или работа с нестандартными протоколами, лучше всего использовать SOCKS5.
Бесплатные прокси
Бесплатные прокси обычно медленные, нестабильные и быстро блокируются.
Могут подвергать ваши данные риску, так как не всегда обеспечивают безопасность.
Обычный вариант для тестирования или обучения, но не рекомендуется для больших проектов.
Дата-центр прокси
Используют IP-адреса, принадлежащие дата-центрам, а не интернет-провайдерам.
Они быстрее и дешевле по сравнению с резидентными прокси, но легче обнаруживаются сайтами, поскольку их IP-адреса часто группируются и имеют похожие характеристики.
Резидентские прокси
Используют реальные IP-адреса, принадлежащие интернет-провайдерам.
Труднее обнаруживаются сайтами по сравнению с дата-центр прокси.
Для работы с сайтами, которые блокируют обычные прокси, резидентные прокси помогут вам выглядеть как обычный пользователь.
Мобильные прокси
IP-адреса привязаны к мобильным операторам.
Очень сложно заблокировать или обнаружить. Обычно дороже других типов прокси.
Если вы работаете с сайтами, требующими мобильного трафика или имеющими высокие анти-бот системы, мобильные прокси незаменимы.
Ротация прокси-серверов помогает избежать блокировок и повысить анонимность. Она позволяет динамически менять IP-адреса, с которых отправляются запросы, что снижает риск блокировки за частые запросы с одного IP.
Как настроить ротацию прокси с cURL:
1. Использование API для получения прокси: множество специальных сервисов (например, ProxyMesh) предлагают API для получения прокси-серверов (в этом примере вам нужно заменить your_username и your_password на ваш реальный логин и пароль, предоставленные сервисом ProxyMesh):
PROXY=$(curl -s 'https://proxy.proxyMesh.com/api/proxy?username=your_username&password=your_password')
curl -x $PROXY http://example.com/ip
2. Допустим, у вас есть список прокси, например, от публичных или платных сервисов. Пример с несколькими прокси-серверами:
proxies=("http://123.45.67.89:8080" "http://98.76.54.32:8080" "http://165.178.0.1:8080")
PROXY=${proxies[$RANDOM % ${#proxies[@]}]}
curl -x $PROXY http://example.com/ip
3. Если вы используете curl в рамках более сложного проекта, для ротации прокси в unix-системах можно применять сторонние инструменты или библиотеки, например, proxychains: установите proxychains и настройте конфигурацию в /etc/proxychains.conf для автоматической ротации.
proxychains curl http://example.com
cURL поддерживает широкий спектр протоколов, что позволяет работать с различными типами сетевых подключений. В зависимости от ваших задач, вы можете выбрать нужный протокол и работать с ним с помощью удобных команд в командной строке. Вот обзор основных протоколов, которые можно использовать с cURL:
HTTP (HyperText Transfer Protocol)
Один из самых популярных протоколов для передачи данных в интернете. Он используется для обмена данными между клиентом (например, браузером) и сервером.
Пример использования: curl http://example.com
Порт по умолчанию: 80
HTTPS (HyperText Transfer Protocol Secure)
Защищённая версия HTTP, использующая SSL/TLS для шифрования данных и защиты от атак типа "man-in-the-middle".
Пример использования: curl https://example.com
Порт по умолчанию: 443
SOCKS (Socket Secure)
Протокол прокси, который позволяет передавать любые типы данных через интернет, включая HTTP, FTP и другие протоколы, работая на уровне сокетов.
Пример использования: curl --proxy socks5://proxy_host:proxy_port http://example.com
Порт по умолчанию: 1080
FTP (File Transfer Protocol)
Протокол для передачи файлов между клиентом и сервером. Он не шифрует передаваемые данные.
Пример использования: curl ftp://example.com/file.txt
Порт по умолчанию: 21
FTPS (FTP Secure)
Расширение FTP, которое добавляет шифрование с использованием SSL/TLS для защиты передаваемых данных.
Пример использования: curl ftps://example.com/file.txt
Порт по умолчанию: 990 (для FTPS-implicit) или 21 (для FTPS-explicit)
SFTP (SSH File Transfer Protocol)
Протокол для передачи файлов, использующий SSH для шифрования и обеспечения безопасности данных.
Пример использования: curl sftp://example.com/file.txt
Порт по умолчанию: 22
LDAP (Lightweight Directory Access Protocol)
Протокол для доступа и управления сервисами каталогов, такими как Active Directory или OpenLDAP.
Пример использования: curl ldap://example.com
Порт по умолчанию: 389
POP3 (Post Office Protocol)
Протокол для получения электронной почты с почтового сервера.
Пример использования: curl pop3://pop.example.com
Порт по умолчанию: 110
IMAP (Internet Message Access Protocol)
Протокол для доступа и управления электронной почтой на сервере.
Пример использования: curl imap://imap.example.com
Порт по умолчанию: 143
В Windows, macOS и Linux cURL уже предустановлен. Проверить это можно следующей командой в терминале (для Windows используйте cmd или PowerShell):
curl --version
В ответ должна появиться информация о версии cURL и libcurl и дополнительно о поддерживаемых протоколах и функциях. Если вместо вывода появляется сообщение об ошибке, например:
Linux/macOS: command not found
Windows: 'curl' is not recognized as an internal or external command
Это значит, что cURL не установлен или не добавлен в переменные окружения. В таком случае нужно установить cURL вручную для вашей операционной системы:
Windows
- Скачайте готовый архив с curl.exe с официального сайта
- Распакуйте архив и добавьте путь к curl.exe в переменные среды PATH.
Или используйте winget:
winget install curl
macOS
Для обновления или установки используйте Homebrew:
brew install curl
Linux
Ubuntu/Debian:
sudo apt update
sudo apt install curl
Fedora/RHEL/CentOS:
sudo dnf install curl # Fedora
sudo yum install curl # CentOS/RHEL
Arch Linux:
sudo pacman -S curl
Давайте рассмотрим команды, которые охватывают основные варианты использования curl — загрузка данных, выполнение запросов и управление файлами:
- Получение содержимого страницы (GET-запрос):
curl http://example.com
Эта команда используется для получения содержимого веб-страницы. curl делает запрос по указанному URL и выводит результат на экран (обычно это HTML-код страницы). Это полезно для получения информации с сайтов, сканирования контента или для тестирования доступности веб-ресурсов.
- POST запрос (используется для отправки данных на сервер, например, при отправке форм):
curl -X POST -d "param1=value1¶m2=value2" https://example.com
-X POST указывает метод запроса POST.
-d позволяет указать данные, которые отправляются на сервер.
Пример с реальным сайтом:
curl -X POST -d "name=JohnDoe&email=johndoe@example.com" https://httpbin.org/post
Дополнительные параметры для POST запроса:
Использование заголовков с -H:
curl -X POST -d "param1=value1" -H "Content-Type: application/x-www-form-urlencoded" https://example.com
Отправка JSON-данных:
curl -X POST -H "Content-Type: application/json" -d '{"key":"value"}' https://example.com
- Загрузка файла с URL (используем тестовый сайт https://www.sample-videos.com):
Чтобы скачать и сохранить файл в текущей рабочей папке, просто используйте команду с опцией -O (заглавная буква), которая сохраняет файл с именем, указанным в URL.
curl https://www.sample-videos.com/img/Sample-jpg-image-50kb.jpg -O
Если вам нужно скачать файл в определенную папку, дополнительно укажите путь, используя опцию -o (строчная буква):
Windows:
curl -o "C:\Users\UserName\Pictures\Sample-jpg-image-50kb.jpg" https://www.sample-videos.com/img/Sample-jpg-image-50kb.jpg
Linux/MacOS:
curl -o "/Users/UserName/Pictures/Sample-jpg-image-50kb.jpg" https://www.sample-videos.com/img/Sample-jpg-image-50kb.jpg
- Проверка заголовков ответа:
curl -I http://example.com
Команда выводит только заголовки ответа сервера, без тела ответа. Флаг -I (или --head) позволяет увидеть метаинформацию о странице (например, код состояния HTTP, тип контента, дату и время последнего обновления). Это полезно для диагностики или проверки доступности ресурса.
- Для аутентификации с использованием имени пользователя и пароля на реальном сайте с помощью curl, можно использовать следующую команду:
curl -u username:password https://example.com
Пример с реальным сайтом:
curl -u demo:password123 https://httpbin.org/basic-auth/demo/password123
- Команда --header (или короткая форма -H) в cURL используется для добавления HTTP-заголовков к HTTP-запросам. Позволяет отправлять дополнительные заголовки HTTP, которые могут требоваться сервером. Например, можно добавить User-Agent:
curl --header "User-Agent: Mozilla/5.0" https://example.com
Или настроить аутентификацию с использованием заголовков:
curl --header "Authorization: Bearer your_token_here" https://api.example.com
Чтобы посмотреть все доступные команды и описание к ним, используйте команду:
curl --help all
Invoke-WebRequest — это командлет PowerShell, который используется для выполнения HTTP-запросов, таких как загрузка веб-страниц, отправка данных или загрузка файлов. Он позволяет работать с веб-контентом напрямую из командной строки, но не является полноценной заменой cURL, так как имеет более ограниченный функционал и синтаксис.
Раньше в PowerShell команда curl была псевдонимом (alias) для Invoke-WebRequest , что часто вводило в заблуждение пользователей, ожидающих работу стандартной утилиты cURL.
В более ранние версии (Windows 10 и Windows 11) Microsoft добавила в систему curl.exe — полноценную версию cURL, аналогичную той, что доступна на Linux и macOS. Однако в PowerShell команда curl иногда по-прежнему может запускать Invoke-WebRequest. Чтобы избежать этого, можно использовать cmd вместо PowerShell, или удалить псевдоним curl с помощью команды Remove-Alias curl, чтобы curl вызывал утилиту curl.exe напрямую. Либо же явно указать curl.exe:
curl.exe https://example.com
Работа с прокси-серверами в cURL обеспечит вам анонимность, обход блокировок и повысит безопасности при взаимодействии с интернет-ресурсами. Знание базовых команд и параметров позволяет эффективно настроить работу с прокси в различных сценариях.
Использование HTTP и HTTPS прокси
Чтобы использовать HTTP/HTTPS прокси, можно указать прокси-сервер с помощью параметра -x или --proxy:
HTTP-прокси:
curl -x http://123.456.789.012:8080 https://example.com
HTTPS-прокси:
curl -x https://123.456.789.012:8080 https://example.com
Использование SOCKS прокси
SOCKS-прокси (SOCKS4 или SOCKS5) поддерживает не только HTTP и HTTPS, но и другие протоколы.
Пример для SOCKS5 прокси:
curl -x socks5://123.456.789.012:1080 https://httpbin.org/ip
Пример для SOCKS4 прокси:
curl -x socks4://123.456.789.012:1080 https://httpbin.org/ip
Аутентификация на прокси
Иногда прокси-серверы требуют аутентификацию. Чтобы предоставить имя пользователя и пароль для прокси, используйте параметр -U или --proxy-user.
curl -x http://123.456.789.012:8080 -U testuser:testpassword https://httpbin.org/ip
Использование прокси с разными протоколами
cURL позволяет работать с различными типами прокси для различных протоколов. Например, вы можете использовать SOCKS5 для HTTP-запросов и HTTPS-прокси для зашифрованных соединений.
curl -x socks5://123.456.789.012:1080 -U testuser:testpassword https://httpbin.org/ip
Этот запрос будет использовать SOCKS5 прокси для обработки HTTP-запросов, а данные будут передаваться через защищённый HTTPS.
Проверка IP-адреса через прокси
Чтобы проверить, что запрос действительно проходит через прокси, можно использовать httpbin.org для получения текущего IP:
curl -x http://123.456.789.012:3128 http://httpbin.org/ip
Проверка скорости прокси
Для измерения скорости прокси в curl можно использовать флаг -w (write-out) для получения скорости загрузки данных (%{speed_download}). Также флаг -o /dev/null используется для игнорирования вывода содержимого, а -s делает выполнение команды "тихим":
curl -x http://123.456.789.012:3128 -o /dev/null -s -w "Download Speed: %{speed_download} bytes/sec\n" https://httpbin.org/bytes/102400
Использование прокси с заголовками User-Agent
Иногда необходимо подменить User-Agent при использовании прокси.
curl -x http://123.456.789.012:3128 -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" http://httpbin.org/headers
Использование прокси только для определённых запросов
Вы можете указывать, какие запросы должны идти через прокси. Например, использовать прокси только для определённых доменов. Опция --noproxy позволяет указать домены, которые будут обходить прокси:
curl --proxy http://123.456.789.012:8080 --noproxy example.com http://httpbin.org/ip
Для упрощения использования прокси в curl можно настроить переменные окружения. Это позволяет автоматизировать прокси-соединения, избегая необходимости каждый раз указывать параметры в командной строке.
Пример использования переменных среды с curl:
- Linux/macOS: В Linux и macOS прокси настраиваются через терминал, используя команду export.
Пример настройки переменной для HTTP-прокси:
export http_proxy=http://123.456.789.012:8080
Для HTTPS-прокси:
export https_proxy=https://123.456.789.012:8080
Windows: В Windows переменные среды можно установить через командную строку:
set http_proxy=http://123.456.789.012:8080
set https_proxy=https://123.456.789.012:8080
После этого можно использовать cURL, и он автоматически будет использовать заданный прокси:
curl https://example.com
Для использования значения переменной окружения в командах или скриптах в Linux/macOS, можно использовать знак $. Он позволяет обратиться к значению переменной. Например:
curl -x $http_proxy https://example.com
Для обращения к значению переменной среды в Windows используется синтаксис с процентами %. Например:
curl -x %http_proxy% https://example.com
Правильная настройка безопасности соединений при работе с прокси поможет предотвратить утечку данных и повысить защиту ваших соединений в сети.
- Использование флага -k или --insecure: эта опция позволяет игнорировать ошибки SSL-сертификатов, что полезно, если ваш прокси использует самоподписанный сертификат:
curl -x https://123.456.789.012:8080 -k https://example.com
- Проверка сертификатов: чтобы избежать рисков при подключении через HTTPS-прокси, важно использовать правильные сертификаты. Если у вас есть файл сертификата, используйте флаг --cacert:
curl -x https://123.456.789.012:8080 --cacert /path/to/certificate.crt https://example.com
- Если у вас есть несколько сертификатов, вы можете указать каталог с доверенными сертификатами, используя опцию --capath. Это полезно, если вам нужно работать с несколькими сертификатами:
curl -x https://123.456.789.012:8080 --capath /path/to/certificates/ https://example.com
Псевдонимы в cURL(или aliases) — это сокращённые команды для часто используемых параметров, которые делают работу с cURL удобнее и быстрее. Вместо того, чтобы каждый раз вводить длинные команды, можно создать псевдонимы для часто повторяющихся операций.
Зачем использовать псевдонимы?
Упрощают команды: вместо длинных параметров можно использовать короткие и удобные.
Снижают ошибки: меньше шансов ошибиться при вводе.
Экономят время: один псевдоним — и все параметры уже настроены.
Как настроить псевдонимы
Linux/macOS (Unix-подобные ОС):
В этих системах псевдонимы поддерживаются напрямую оболочкой (например, bash, zsh и т. д.). Вы можете добавлять псевдонимы в конфигурационные файлы оболочки (например, .bashrc, .zshrc и другие), чтобы они были доступны в любой сессии терминала.
Пример для bash:
- Откройте или создайте файл ~/.bashrc (или ~/.zshrc для zsh):
nano ~/.bashrc
- Добавьте псевдонимы, например:
alias curlproxy="curl -x http://123.456.789.012:8080"
После этого вы можете использовать команду curlproxy в любой сессии.
curlproxy https://example.com
Windows:
В Windows использование псевдонимов не поддерживается так же, как в Unix-подобных системах. Однако в PowerShell можно создать псевдонимы с помощью командлета New-Alias. Но стоит отметить, что New-Alias не позволяет назначать параметры для команд, такие как прокси-сервер. Вместо этого, для создания псевдонимов с параметрами, можно воспользоваться функциями PowerShell или же использовать пользовательские скрипты.
В PowerShell:
В PowerShell можно создать функцию, которая будет выполнять роль псевдонима.
- Откройте PowerShell.
- Создайте функцию для псевдонима:
function curlproxy { curl -x http://123.456.789.012:8080 $args }
Если вы хотите, чтобы эта функция была доступна всегда, добавьте её в профиль PowerShell (например, в файл $PROFILE).
В командной строке (CMD):
В CMD можно использовать файл batch (.bat) для создания псевдонимов. Например, создайте файл curlproxy.bat в директории, которая указана в системной переменной PATH, и в этом файле напишите:
curl -x http://123.456.789.012:8080 %1
Затем вы можете использовать команду curlproxy, передавая параметры как аргументы.
Файл конфигурации .curlrc — это специальный файл, который используется для хранения настроек по умолчанию для утилиты cURL. Этот файл позволяет автоматизировать процесс настройки параметров командной строки, таких как прокси-серверы, пользовательские агенты, SSL-сертификаты и другие параметры. Это особенно полезно, если вы хотите избежать указания одних и тех же опций каждый раз при вызове команды cURL.
Чтобы настроить прокси в файле .curlrc, достаточно указать соответствующие параметры. Например:
proxy = "http://123.456.789.012:8080"
Этот параметр указывает cURL использовать прокси-сервер с указанным адресом и портом. Также можно настроить аутентификацию для прокси-сервера, указав имя пользователя и пароль:
proxy-user = "username:password"
После того как вы настроили файл .curlrc, cURL автоматически применит эти параметры при выполнении команд, так что вам не нужно будет указывать их вручную в командной строке. Например, команда:
curl http://example.com
будет использовать прокси, указанный в файле .curlrc, без необходимости добавлять флаг -x или другие параметры.
- Предположим, вы хотите извлечь данные с конкретной веб-страницы, например, с http://example.com. В этом случае вы можете использовать следующую команду curl с прокси:
curl -x http://123.45.67.89:8080 http://example.com -o example.html
Здесь:
-x http://123.45.67.89:8080 — прокси-сервер.
http://example.com — целевая веб-страница, с которой вы хотите получить данные.
-o example.html — сохранение содержимого страницы в файл example.html.
После выполнения команды example.html будет содержать HTML-код целевой страницы.
- Давайте извлечем заголовки <h1> с веб-страницы https://example.com с использованием прокси.
Шаги:
Используем прокси-сервер для отправки запросов.
Применяем grep или sed для извлечения данных.
curl -x http://123.45.67.89:8080 https://example.com | grep -oP '<h1.*?>.*?</h1>'
В PowerShell вы можете использовать Select-String (встроенную командлету) для выполнения аналогичной задачи. Например:
curl.exe -x http://123.45.67.89:8080 https://example.com | Select-String -Pattern '<h1.*?>.*?</h1>' -AllMatches | ForEach-Object { $_.Matches.Value }
Если у вас установлен WSL (Windows Subsystem for Linux), вы можете выполнить ту же команду, что и на Linux:
curl -x http://123.45.67.89:8080 https://example.com | grep -oP '<h1.*?>.*?</h1>'
Интеграция cURL с Python и Node.js открывает множество возможностей для автоматизации запросов, веб-скрапинга и работы с API. Используя модули subprocess pycurl в Python или child_process или node-libcurl в Node.js, вы можете выполнить сложные команды и извлекать данные в вашем приложении. Рассмотрим, как интегрировать cURL с каждым из этих языков.
В Python
Для выполнения cURL-запросов в Python используем модуль subprocess.
GET-запрос с прокси:
import subprocess
curl_command = ['curl', '-x', 'http://123.45.67.89:8080', 'https://example.com']
response = subprocess.run(curl_command, capture_output=True, text=True)
print(response.stdout)
Сделаем то же самое с pycurl:
import pycurl
from io import BytesIO
# Инициализация буфера для захвата вывода
buffer = BytesIO()
# Создание объекта pycurl
c = pycurl.Curl()
# Установка URL
c.setopt(c.URL, 'https://example.com')
# Установка прокси
c.setopt(c.PROXY, 'http://123.45.67.89:8080')
# Установка вывода в буфер
c.setopt(c.WRITEDATA, buffer)
# Выполнение запроса
c.perform()
# Получение ответа
response = buffer.getvalue().decode('utf-8')
# Вывод ответа
print(response)
# Очистка
c.close()
В Node.js
Для выполнения cURL-запросов в Node.js используем модуль child_process.
GET-запрос с прокси:
const { exec } = require('child_process');
exec('curl -x http://123.45.67.89:8080 https://example.com', (error, stdout, stderr) => {
if (error) console.error(`exec error: ${error}`);
else console.log(stdout);
});
Произведем те же действия с помощью node-libcurl:
const { Curl } = require('node-libcurl');
const curl = new Curl();
curl.setOpt('URL', 'https://example.com');
curl.setOpt('PROXY', 'http://123.45.67.89:8080');
// Установка колбэка для обработки ответа
curl.on('end', (statusCode, body, headers) => {
console.log(body);
curl.close();
});
curl.on('error', (error) => {
console.error('Ошибка:', error); // Обработка ошибок
});
curl.perform();
Интеграция CapMonster Cloud с cURL позволяет автоматизировать процесс решения CAPTCHA при выполнении HTTP-запросов. Вот как это можно сделать с использованием cURL:
- Для начала зарегистрируйтесь на сервисе CapMonster Cloud и получите API-ключ.
- Составьте и отправьте задачу на решение капчи (в нашем случае reCAPTCHA v2) через CapMonster Cloud — используйте документацию:
MacOS/Linux:
curl -X POST https://api.capmonster.cloud/createTask \
-H "Content-Type: application/json" \
-d '{
"clientKey": "API_KEY",
"task": {
"type": "RecaptchaV2TaskProxyless",
"websiteURL": "https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high",
"websiteKey": "6Lcg7CMUAAAAANphynKgn9YAgA4tQ2KI_iqRyTwd"
}
}'
Windows (CMD):
curl -X POST https://api.capmonster.cloud/createTask ^
-H "Content-Type: application/json" ^
-d "{\"clientKey\":\"API_KEY\",\"task\":{\"type\":\"RecaptchaV2TaskProxyless\",\"websiteURL\":\"https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high\",\"websiteKey\":\"6Lcg7CMUAAAAANphynKgn9YAgA4tQ2KI_iqRyTwd\"}}"
- Получение результата задачи
После того как задача отправлена, вы получите ID задачи, который понадобится для получения ответа.
MacOS/Linux:
curl -X POST https://api.capmonster.cloud/getTaskResult \
-H "Content-Type: application/json" \
-d '{
"clientKey": "API_KEY",
"taskId": "task_id_received_from_createTask"
}'
Windows (CMD):
curl -X POST https://api.capmonster.cloud/getTaskResult ^
-H "Content-Type: application/json" ^
-d "{\"clientKey\":\"API_KEY\",\"taskId\":\"task_id_received_from_createTask\"}"
- Решение CAPTCHA
В ответ на запрос с getTaskResult CapMonster вернет решение задачи, например, токен для reCAPTCHA, который можно использовать для заполнения формы.
MacOS/Linux:
curl -X POST https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php \
-d "g-recaptcha-response=your_captcha_solution" \
-d "other_data=value"
Windows (CMD):
curl -X POST https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php ^
-d "g-recaptcha-response=your_captcha_solution" ^
-d "other_data=value"
Пример использования прокси с запросом createTask
Если вы хотите отправить запрос через прокси, добавьте параметр -x:
MacOS/Linux:
curl -x http://proxy-server:port -X POST https://api.capmonster.cloud/createTask \
-H "Content-Type: application/json" \
-d '{
"clientKey": "API_KEY",
"task": {
"type": "RecaptchaV2TaskProxyless",
"websiteURL": "https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high",
"websiteKey": "6Lcg7CMUAAAAANphynKgn9YAgA4tQ2KI_iqRyTwd"
}
}'
Windows (CMD):
curl -x http://proxy-server:port -X POST https://api.capmonster.cloud/createTask ^
-H "Content-Type: application/json" ^
-d "{\"clientKey\": \"API_KEY\", \"task\": {\"type\": \"RecaptchaV2TaskProxyless\", \"websiteURL\": \"https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high\", \"websiteKey\": \"6Lcg7CMUAAAAANphynKgn9YAgA4tQ2KI_iqRyTwd\"}}"
Отладочный вывод curl
Этот метод полезен для проверки того, как curl отправляет запрос через прокси и правильно ли он интерпретирует настройки.
- Используйте флаг --proxy для указания прокси:
curl --proxy http://123.456.7.8.9:3128 http://example.com
Если прокси требует аутентификации, добавьте:
curl --proxy http://user:password@123.456.7.8.9:3128 http://example.com
- Включите отладочный вывод с флагом -v или --trace-ascii:
curl -v --proxy http://123.456.7.8.9:3128 http://example.com
Это покажет детали подключения, отправляемые заголовки и другие полезные данные.
- Проверьте результат.
Если запрос успешен, вы увидите HTTP-ответ.
Если есть ошибка (например, 407 Proxy Authentication Required), вы можете скорректировать параметры.
Пример с полным трассировочным выводом:
curl --trace-ascii debug.log --proxy http://123.456.7.8.9:3128 http://example.com
Вывод будет сохранён в файле debug.log для детального анализа.
Использование локального прокси-сервера
Этот метод подходит для детальной проверки данных, которые отправляются через прокси (включая заголовки, тело запросов, ответы и т. д.).
- Установите и запустите локальный прокси-сервер:
mitmproxy --listen-port 8080
- Настройте curl для использования локального прокси.
curl --proxy http://127.0.0.1:8080 http://example.com
- Откройте интерфейс mitmproxy для анализа запросов.
Вы сможете видеть все HTTP-запросы и ответы в реальном времени.
Это удобно для отладки, чтобы убедиться, что запросы отправляются правильно и данные передаются через прокси.
Дополнительно: подключите удалённый прокси через mitmproxy. Если вы хотите использовать mitmproxy для мониторинга работы с удалённым прокси, настройте его как "прокси для прокси" (upstream proxy):
mitmproxy --mode upstream:http://123.456.7.8.9:3128 --listen-port 8080
Для проверки доступности самого прокси используйте флаги --connect-timeout и --max-time:
curl --proxy http://123.456.7.8.9:3128 --connect-timeout 10 --max-time 15 http://example.com
Как и в любой программе, в cURL иногда встречаются ошибки. Приведем список частых ошибок при использовании curl с прокси и их возможные причины:
curl: (5) Unsupported proxy syntax. Неправильный формат строки прокси. Убедитесь, что формат прокси соответствует
curl: (7) Failed to connect to proxy_host port 8080: Connection refused. Прокси-сервер недоступен или выключен. Неверный IP-адрес или порт прокси. Проверьте, работает ли прокси. Убедитесь в правильности IP и порта.
curl: (7) Could not resolve proxy: proxy_host. Указанный DNS-имя прокси не может быть разрешено. Убедитесь, что имя хоста указано правильно. Попробуйте использовать IP-адрес вместо имени хоста
curl: (35) schannel: next InitializeSecurityContext failed. Проблемы с SSL/TLS-соединением. Проверьте поддержку HTTPS на стороне прокси. Временно отключите проверку сертификатов
curl: (52) Empty reply from server. Прокси не отправляет ответ на запрос. Проверьте, доступен ли сервер через прокси. Убедитесь, что ваш запрос корректен.
curl: (56) Proxy CONNECT aborted. Прокси разорвал соединение.
Неверные учетные данные для прокси. Проверьте логин и пароль для прокси
curl: (407) Proxy Authentication Required. Прокси требует аутентификацию, но учетные данные не предоставлены. Укажите логин и пароль в строке прокси
curl: (28) Operation timed out. Прокси недоступен.
Сервер слишком долго отвечает. Проверьте доступность прокси и сервера. Увеличьте тайм-аут
curl: (18) Transfer closed with outstanding read data remaining. Прокси неожиданно завершил передачу данных. Попробуйте другой прокси. Убедитесь, что прокси поддерживает запрашиваемый протокол (HTTP/HTTPS).
curl: (22) The requested URL returned error: 403 Forbidden. Доступ к ресурсу через прокси заблокирован. Проверьте, разрешён ли доступ к целевому URL через этот прокси. Используйте другой прокси.
curl: (60) SSL certificate problem. Проблемы с проверкой SSL-сертификата сервера. Отключите проверку SSL
curl: (6) Could not resolve host: example.com. DNS-имя целевого сервера не разрешается через прокси. Проверьте подключение прокси к интернету. Убедитесь в правильности имени хоста.
NB: Напоминаем, что продукт используется для автоматизации тестирования на ваших собственных сайтах и на сайтах, к которым у вас есть доступ на законных основаниях.