Блог Froxy | Новости, полезные статьи о использовании прокси

Гайд по cURL: Как использовать cURL с прокси-сервером

Written by Команда Froxy | 28.12.2023 10:00:00

Когда речь заходит о парсинге или об автоматизации рутинных задач в интернете, бородатые сисадмины и web-программисты (как начинающие, так и профи) всегда знают волшебный рецепт, который сможет решить практически любые «хотелки» – это великий и ужасный cURL.

Всех слабонервных просьба отойти от экранов и переключиться на что-то более позитивное. Ниже речь о хардкор-решениях для профи, а также для тех, кто задумывается о создании своего собственного парсера.

Ранее мы рассказывали о разных библиотеках и фреймворках для Python, а также о библиотеках для парсинга на языке Go. Сейчас о command-like интерфейсе и о том, как использовать cURL через прокси.

Что такое cURL?

cURL – это связка из кроссплатформенной библиотеки (libcurl) и программы, управляемой с помощью интерфейса командной строки, предназначенной для обмена информацией и файлами посредством различных интернет-протоколов. В списке поддерживаемых протоколов более десятка наименований, но всех их объединяет работа с адресами на основе разметки URL.

Собственно, сURL – это анаграмма от слов «Client URL». Аббревиатура URL расшифровывается как Uniform Resource Locator, что в переводе означает «единый/унифицированный указатель ресурса».

Многие обыватели привыкли называть URL-адреса ссылками. Типовая структура URL-адреса выглядит следующим образом:

<протокол_или_схема>://<логин>:<пароль>@<хост>:<номер_порта>/<символьный_путь>?<дополнительные_параметры>#<якорь>

Если какие-то элементы не используются, то они опускаются (то есть убираются из URL).

Вот так выглядят URL-адреса для известного многим протокола HTTP:

http://www.домен.зона/путь/до/страницы/

Тот же адрес может выглядеть заметно сложнее, если используется передача дополнительных параметров и якорных ссылок:

http://www.домен.зона/путь/до/страницы/?параметр1=значение1&параметр2=значение2#якорь_для_перемещения_к _нужному_идентификатору_элемента

Если используется протокол SOCKS5 и параметры авторизации, как в случае с нашими резидентными или мобильными прокси, то URL будет выглядеть примерно так:

socks5://login:password@123.123.123.123:port

Обратите внимание, вместо домена здесь используется конкретный IP-адрес.

cURL поддерживает следующие протоколы:

  • HTTP и его защищённая версия HTTPS, GOPHER (аналог www),
  • Для работы с файлами FTP (FTPS), SFTP, FILE, TFTP, LDAP (LDAPS)
  • Для удалённого подключения SCP, SMB, SMBS, TELNET,
  • Для работы с почтой POP3 (POP3S), IMAP (IMAPS), SMTP (SMTPS),
  • А также DICT, RTMP и RTSP.

Но что самое приятное, cURL умеет работать через HTTP и SOCKS-прокси.

Спектр задач, для которых можно применять cURL, просто нереальный. Это почти что текстовый браузер, только управлять его работой нужно из консоли. И именно поэтому очень важно знать ключевые аргументы cURL и порядок указания их параметров.

cURL обычно используют:

  • Самостоятельно, с задействованием интерфейса командной строки.
  • В структуре shell-скриптов (или в cmd-скриптах).
  • Для взаимодействия с удалёнными программными интерфейсами (API).

Давайте разбираться в деталях.

Установка cURL

Для Windows-систем

Во всех последних версиях операционных систем Windows, начиная со сборки 1803 (Windows 10) и выше, есть встроенный клиент cURL. Но тут есть нюансы. Системное решение работает как командлет Invoke-WebRequest. Соответственно, предполагается использование изменённого синтаксиса, вследствие чего будут недоступны многие параметры командной строки.

Поэтому, если вы хотите использовать стандартный интерфейс cURL, нужно выбрать одно из нескольких решений:

  • Прямое обращение к файлу curl.exe (при желании можно скачать актуальную версию сборки cURL для Windows с официального сайта утилиты).
  • Установка окружения WSL (Windows Subsystem Linux). Фактически это специализированная виртуальная машина.
  • Ручная установка любого Linux-дистрибутива в среде виртуализации (VirtualBox и аналоги).

Для Linux-дистрибутивов

Установка cURL в большинстве случаев не потребуется. Во всех популярных дистрибутивах связка из библиотеки и утилиты есть в наличии.

Если при вызове команды curl в терминале система ругается на отсутствующий исполняемый файл, то можно установить программу с помощью штатного пакетного менеджера, например:

  • Для дистрибутивов на базе Debian/Ubuntu – sudo apt-get install curl
  • Для дистрибутивов на базе Fedora/CentOS/RHEL – yum install curl
  • Для дистрибутивов на базе ArchLinux – pacman -Sy curl

Для MacOS

cURL установлена во всех Mac OS по умолчанию. Чтобы начать использование утилиты, просто откройте приложение «Терминал» и начните вводить команды.

Использование командной строки и аргументов

Чтобы обратиться к программе в консоли (в терминале или в командной строке), достаточно просто ввести её имя: curl.

Но, к сожалению, команда без аргументов не даст абсолютно никакого результата. Максимум, отобразит подсказку о том, как вызвать помощь (справочный раздел).

Чтобы увидеть базовый список доступных аргументов, нужно ввести команду:

curl --help

или для Windows:

curl.exe --help

Если вам нужен максимально полный обзор всех опций, введите команду:

curl --help all

Обратите внимание, аргументы можно указывать двумя способами:

  • С одним тире, тогда обращение к ним будет коротким, например, «-h» будет равнозначно вводу «--help». Но «коротких» команд обычно немного, буквально с десяток.
  • С двумя тире, тогда название параметра нужно указывать в полном написании, например, «--disallow-username-in-url».

Если использовать утилиту без аргументов, но с указанием URL-адреса, то это будет аналогом GET-запроса. Пример на пальцах:

curl https://blog.froxy.com/ru/what-is-data-parsing

Это то же самое, что и:

curl --request GET https://blog.froxy.com/ru/what-is-data-parsing

На всякий случай, cURL прекрасно работает с SSL-сертификатами (то есть с httpS-протоколом) и с другими типами запросов: PUT, POST, DELETE, HEAD.

В ответ на GET-запрос cURL получит полное содержимое HTML-страницы по указанному адресу.

Вот так будет выглядеть команда для работы cURL с HTTP-заголовками:

curl -I https://blog.froxy.com/ru/what-is-data-parsing

А так полученные данные можно сохранить в файл:

curl -o what-is-data-parsing.html “https://blog.froxy.com/ru/what-is-data-parsing”

Среди общего списка аргументов cURL есть:

  • Средства для трассировки и отправки запросов.
  • Тонкие настройки для управления SSL-сертификатами и методами авторизации.
  • Средства для работы с загрузкой файлов, с cookies, с сессиями, с IP-протоколами и т.п.
  • Средства для отправки данных.
  • Запись данных в файлы (для сохранения полученной информации).
  • Управление кодировками, временем и скоростью соединений.
  • Детальная работа с прокси и туннелированием.

Использование переменных окружения

Что интересно, cURL поддерживает функции подстановки и перестановки.

Например, можно использовать такой синтаксис:

curl “http://домен.{один,два,три}.com”

Данные, записанные в фигурных скобках через запятую, будут последовательно перебираться скриптом.

Если нужно обозначить диапазон числовых значений, можно задействовать квадратные скобки, например, так:

"http://домен.зона/archive[2000-2022]/vol[1-4]/part{a,b,c}.html"

Скрипт сам последовательно укажет все комбинации от 2000 до 2022 (для archive) и от 1 до 4 (для vol). Если использовать двоеточие, то можно указать шаг автоматического перебора, например, так [2000-2022:3], в итоге скрип будет использовать порядок 2000, 2003, 2006 и т.п.

Начиная с версии cURL 8.3 в утилиту добавлена поддержка переменных. Создание переменных реализовано через атрибут --variable.

Например:

--variable '%DATA@default'

 --expand-url = "https://example.com/api//method"

Крайне важно задействовать именно двойные кавычки, так как одинарные не поддерживают работу с переменными (они будут восприниматься как обычный текст).

В приведённом выше примере мы сначала объявили переменную DATA и сразу же присвоили ей дефолтное значение default (значение по умолчанию будет использовано утилитой в случае, если переменная будет пустой на момент обращения к ней).

Обращение к переменной выполняется с помощью конструкции .

Плюс, при работе cURL можно задействовать переменные, которые объявляются на уровне оболочки (в shell-скриптах). Тут тоже главное не забыть о двойных кавычках:

your-variable = XXX

curl -X GET "http://домен.com:8080/details/${your-variable}"

Настройка cURL для постоянной работы через прокси

Для работы с прокси в cURL используется атрибут «-x» или «--proxy».

Например, так:

curl --proxy "http://login:password@123.123.123.123:port" "http://домен.com/целевая-страница"

Или так:

curl -x "http://login:password@123.123.123.123:port" "http://домен.com/целевая-страница"

Но согласитесь, что каждый раз вводить одни и те же данные не очень удобно. А что, если данные прокси вообще каждый раз меняются?

Для этих ситуаций есть несколько типовых решений. О них ниже.

Прокси для cURL в переменных

Если нет задачи полного перебора списка с прокси-серверами, то можно обойтись максимально простой записью.

Пример:

Для Linux-систем

export yourproxy=http://LOGIN:PASSWORD@proxy-url.com:8080

Для Windows-систем

set yourproxy=http://LOGIN:PASSWORD@proxy-url.com:8080

Так мы создали переменную и заполнили её значением.

Осталось вызывать переменную там, где это нужно. В случае с прокси это может выглядеть так:

curl -x $yourproxy https://blog.froxy.com/ru/what-is-data-parsing

Вариант с перебором списка прокси будет заметно сложнее – см. раздел выше про использование переменных окружения.

Если вам нужен SOCKS-протокол, то его можно указать явно внутри адреса прокси, например, --proxy "socks5://login:password@123.123.123.123:port".

Ну или вместо атрибута «--proxy» или «-x» можно использовать специальные атрибуты:

  • --socks4
  • --socks4a
  • --socks5

Синтаксис у них аналогичный.

Прокси в псевдонимах (алиасах)

Теперь представим, что вам нужно работать с командной строкой, но не хочется каждый раз вводить параметры коннекта cURL к одному и тому же прокси-серверу.

Наиболее интересный выход для такой рутины – создание ссылки (алиаса или псевдонима). Выполняется это командой alias (в Linux-системах).

Пример ярлыка с готовыми параметрами подключения прокси:

alias xcurl=”curl --proxy http://LOGIN:PASSWORD@proxy-url.com:8080”

Теперь, чтобы выполнить запрос к нужному сайту или задействовать иные параметры утилиты, вместо стандартного вызова curl достаточно обратиться к нашему алиасу:

xcurl https://blog.froxy.com/ru/what-is-data-parsing

Вместо xcurl вы можете использовать любое другое имя, главное, чтобы оно не совпадало с именами других системных утилит и легко запоминалось/вводилось в терминале.

В Windows тоже есть команда alias, но работает она совсем по-другому. Чтобы создать ярлык для новой команды, нужно будет поработать с реестром и с .bat/.cmd файлами.

Использование файла .curlrc

Все настройки утилиты cURL, которые связаны с конкретным пользователем, сохраняются в его домашнем каталоге:

Для Linux-систем

/home/user/.curlrc

Обратите внимание, точка в начале файла говорит о том, что он является скрытым. Чтобы отобразить его в проводнике (файловом менеджере), нужно активировать опцию показа скрытых файлов.

Ну, или можно напрямую обратиться к редактированию конфига через командную строку:

nano /home/user/.curlrc

или

nano ~/.curlrc

Nano – это текстовый редактор для консоли, вместо него можно использовать софт с графическим интерфейсом, например, Gedit.

Если файл не существует, просто создайте его (фактически, команда, приведённая выше для консоли, никак не изменится).

Впишите настройку прокси в файл и сохраните его:

proxy="http://ЛОГИН:ПАРОЛЬ@123.123.123.123:1234"

Готово, теперь можно использовать cURL как обычно, параметры прокси будут подтягиваться по умолчанию:

curl https://blog.froxy.com/ru/what-is-data-parsing

Для Windows-систем файл настроек должен храниться к папке C:\Users\<ИМЯ-ВАШЕГО-ПОЛЬЗОВАТЕЛЯ>\AppData\Roaming, а называться должен _curlrc.

Выводы и рекомендации

cURL – это действительно мощный и функциональный инструмент в умелых руках. С одной только этой утилитой можно собрать и выгрузить заголовки страниц целевого сайта, скачать с него весь контент и HTML-страницы. Всё, что вам понадобится – только консоль и несколько стандартных команд.

С библиотекой cURL бесшовно интегрируются многие языки веб-программирования. Пример документации для PHP. Поэтому скрипты автоматизации парсинга смогут заиграть новыми красками буквально в несколько дополнительных строк кода.

Вместе с тем, обывателям cURL точно не подойдёт ввиду сложности синтаксиса и тяжёлого понимания принципов работы.

Каким бы простым ни был ваш скрипт парсинга, с большой вероятностью его могут заблокировать из-за повторяющихся запросов с одного и того же IP-адреса хоста. Чтобы избежать таких блокировок, нужны прокси. cURL умеет работать с ними «из коробки».

Единственная проблема – найти качественный сервис. Мы предлагаем лучшие мобильные и резидентные прокси с автоматической ротацией. В наличии API и простая выгрузка списков, таргетинг до уровня города и оператора связи. В пуле более 8 млн. IP-адресов. Для тестирования есть специальный триал-пакет.