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

Используйте это подробное руководство с фрагментами кода, чтобы начать использовать cURL с прокси-серверами.
2 мин. чтения
How to Use cURL With Proxy blog image

В этой публикации мы рассмотрим:

  • Что такое cURL
  • Установка cURL.
  • Что вам понадобится, чтобы начать использовать прокси-серверы
  • Как указать прокси-сервер HTTP/HTTPS в cURL.
  • Как настроить прокси-сервер SOCKS в cURL
  • Необходимые советы и рекомендации
  • Какие прокси-серверы лучше всего подходят для cURL?

Что такое cURL?

cURL, сокращенно от «URL-адрес клиента» (Client URL), представляет собой инструмент для отправки и получения данных через Интернет с использованием URL-адресов. В качестве программного проекта он предоставляет библиотеку (libcurl) и инструмент командной строки (curl). Здесь речь пойдет о curl, инструменте командной строки для передачи данных с помощью синтаксиса URL. 

Проект поддерживает широкий спектр протоколов, включая HTTP, HTTPS, FTP, FTPS, SFTP, POP3, POP3S, IMAP, IMAPS, LDAP, LDAPS, SCP и другие. Это делает curl самым популярным и широко используемым HTTP-клиентом командной строки в мире. 

cURL очень универсален и представляет собой стандартное решение для выполнения различных задач, таких как HTTP-запросы, загрузка файлов, загрузка данных и взаимодействие с API. Он предлагает несколько функций, от настройки запросов до поддержки прокси-серверов.

Установка curl

Давайте теперь узнаем, как установить curl на вашем компьютере.

macOS

Вам не нужно устанавливать curl на macOS. Инструмент уже включен в операционную систему, и вы можете по умолчанию использовать его в приложении Terminal.

Windows

Начиная с Windows 10, Windows поставляется с копией curl. В то же время команда curl является псевдонимом командлета Invoke-WebRequest консоли PowerShell. Это означает, что команды curl в терминале Windows будут незаметно вызывать Invoke-Request. Чтобы избежать этого и использовать curl из cURL, замените «curl» на «curl.exe». Таким образом, PowerShell будет запускать curl, а не Invoke-Request.

Например, вы можете проверить текущую версию curl, установленную на вашем компьютере под управлением Windows, в терминале с помощью:

  curl.exe u002du002dversioncurl.exe u002du002dversion

В результате должно появиться что-то вроде этого:

  curl 8.0.1 (Windows) libcurl/8.0.1 Schannel WinIDNnnRelease-Date: 2023-03-20nnProtocols: dict file ftp ftps http https imap imaps pop3 pop3s smtp smtps telnet tftpnnFeatures: AsynchDNS HSTS HTTPS-proxy IDN IPv6 Kerberos Largefile NTLM SPNEGO SSL SSPI threadsafe Unicode UnixSocketsn

Если вы являетесь пользователем Windows, замените все экземпляры «curl» в командах, содержащихся в статье, на строку «curl.exe». В противном случае настройте подсистему Windows для Linux (WSL) и следуйте приведенным ниже инструкциям.

Linux

В Linux процедура установки curl меняется в зависимости от используемого дистрибутива. Популярные дистрибутивы, такие как Ubuntu и Fedora, поставляются с Linux по умолчанию. Таким образом, вы можете использовать curl непосредственно в терминале.

В других дистрибутивах curl может отсутствовать. В этом случае вы можете добавить его с помощью диспетчера дистрибутивов. В ОС на базе Debian вы можете установить curl с помощью следующей команды:

  sudo apt-get install curlsudo apt-get install curl

Что нужно для использования прокси-сервера в curl

Прокси-сервер выступает в роли посредника между клиентом и целевым сервером. Он перехватывает запросы клиента, пересылает их на сервер, получает ответы от сервера и отправляет их обратно клиенту. Такой подход посредничества повышает анонимность и помогает избежать сетевых ограничений. Это связано с тем, что целевой сервер будет видеть запросы как исходящие с IP-адреса и из местоположения выбранного прокси-сервера, а не от вас.

Чтобы начать использовать curl с прокси-сервисами, вам сначала нужен доступ к прокси-серверу. В частности, вот синтаксис URL-адреса прокси-сервера:

  [u003cPROTOCOLu003e://][u003cUSERNAMEu003e:u003cPASSWORDu003e]@u003cHOSTu003e[:u003cPORTu003e][u003cPROTOCOLu003e://][u003cUSERNAMEu003e:u003cPASSWORDu003e]@u003cHOSTu003e[:u003cPORTu003e]

Он включает следующее:

  • <PROTOCOL> протокол, используемый для подключения к прокси-серверу. Если протокол не указан, по умолчанию curl будет иметь значение http://.
  • <HOST> требуемый IP-адрес или URL-адрес имени хоста прокси-сервера.
  • <PORT> номер порта, прослушиваемого прокси-сервером. Если порт не указан, по умолчанию curl будет использовать порт 1080.
  • <USERNAME> необязательное имя пользователя, которое нужно указать, когда требуется аутентификация на прокси-сервере.
  • <PASSWORD> необязательный пароль, который нужно указать, когда требуется аутентификация на прокси-сервере.

Что касается протоколов прокси-серверов, то наиболее популярными являются HTTP и HTTPS, за которыми следует SOCKS.

Пора получить действительный прокси-сервер HTTP!

Вы можете получить его бесплатно в списке бесплатных прокси-серверов, как показано ниже:

  IP Address: 71.19.249.97; Port: 8443IP Address: 71.19.249.97; Port: 8443

Это означает, что URL-адрес прокси-сервера:

  http://71.19.249.97:8443http://71.19.249.97:8443

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

Решение? Прокси-серверы премиум-класса от Bright Data — лучшего поставщика данных услуг на рынке. Подпишитесь и попробуйте наши надежные прокси-серверы бесплатно.

Имейте в виду, что решения премиум-класса защищены аутентификацией. Предположим, что используется протокол HTTP, хост — 71.103.203.109, порт — 9321, а пара учетных данных — admin-32458 и rTuJ3tEwf. В этом случае URL-адрес прокси-сервера будет выглядеть следующим образом:

  http://admin-32458:@rTuJ3tEwf71.103.203.109:9321http://admin-32458:@rTuJ3tEwf71.103.203.109:9321

Как указать прокси-сервер HTTP/HTTPS в curl

Прежде чем начать, запустите следующую команду в своем терминале:

  curl u0022https://httpbin.org/ipu0022curl u0022https://httpbin.org/ipu0022

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

  curl [optional_commands] u003cURLu003ecurl [optional_commands] u003cURLu003e

При использовании curl рекомендуется заключать URL-адреса в двойные кавычки, чтобы избежать проблем со специальными символами.

Запустите его, и вы получите что-то вроде этого:

  {nn  u0022originu0022: u0022194.33.243.7u0022nn}

Проект HTTPBin позволяет получать информацию о ваших HTTP-запросах. В частности, конечная точка /ip возвращает исходный IP-адрес запроса, то есть IP-адрес компьютера, выполнившего запрос. Другими словами, он возвращает ваш IP-адрес. 

После настройки прокси-сервера в curlвы должны увидеть IP-адрес прокси-сервера, а не свой.

Есть несколько способов настроить прокси-сервер в curl. Теперь давайте перейдем к наиболее популярным подходам к указанию прокси-сервера HTTP/HTTPS в curl.

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

curl предлагает два аргумента командной строки для установки URL-адреса прокси-сервера:

  • -x
  • --proxy

Их можно использовать как синонимы, поскольку они делают одно и то же. Последний аргумент — всего лишь псевдоним первого.

Итак, синтаксис использования curl с прокси-сервисами выглядит следующим образом:

  curl -x [u003cPROTOCOLu003e://][u003cUSERNAMEu003e:u003cPASSWORDu003e]@u003cHOSTu003e[:u003cPORTu003e] u003cURLu003ecurl -x [u003cPROTOCOLu003e://][u003cUSERNAMEu003e:u003cPASSWORDu003e]@u003cHOSTu003e[:u003cPORTu003e] u003cURLu003e

Или:

  curl u002du002dproxy [u003cPROTOCOLu003e://][u003cUSERNAMEu003e:u003cPASSWORDu003e]@u003cHOSTu003e[:u003cPORTu003e] u003cURLu003ecurl u002du002dproxy [u003cPROTOCOLu003e://][u003cUSERNAMEu003e:u003cPASSWORDu003e]@u003cHOSTu003e[:u003cPORTu003e] u003cURLu003e

Примечание: параметры командной строки в curlзависят от регистра. Например, -x и -X имеют два разных значения.

Если вы сейчас запустите:

  curl -x u0022http://71.19.249.97:8443u0022 u0022https://httpbin.org/ipu0022curl -x u0022http://71.19.249.97:8443u0022 u0022https://httpbin.org/ipu0022

Или эквивалент:

  curl u002du002dproxy u0022http://71.19.249.97:8443u0022 u0022https://httpbin.org/ipu0022curl u002du002dproxy u0022http://71.19.249.97:8443u0022 u0022https://httpbin.org/ipu0022

Вы должны получить:

  {nn  u0022originu0022: u002271.19.249.97u0022nn}

Источник совпадает с IP-адресом прокси-сервера. Это означает, что целевой сервер, как и ожидалось, воспринимает запрос как исходящий от прокси-сервера. Отлично!

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

Использование переменных среды

Другой способ использования прокси-сервера в curl заключается в установке следующих двух переменных среды:

  • http_proxy: URL-адрес прокси-сервера, который будет использоваться для доступа к URL-адресам, использующим протокол HTTP.
  • https_proxy: URL-адрес прокси-сервера, который будет использоваться для доступа к URL-адресам, использующим протокол HTTP.

В macOS и Linux вы можете настроить эти две среды, используя следующий синтаксис:

  export http_proxy=u0022[u003cPROTOCOLu003e://][u003cUSERNAMEu003e:u003cPASSWORDu003e]@u003cHOSTu003e[:u003cPORTu003e]u0022nnexport https_proxy=u0022[u003cPROTOCOLu003e://][u003cUSERNAMEu003e:u003cPASSWORDu003e]@u003cHOSTu003e[:u003cPORTu003e]u0022

Итак, две команды будут выглядеть следующим образом:

  export http_proxy=u0022http://71.19.249.97:8443u0022nnexport https_proxy=u0022http://71.19.249.97:8443u0022

В Windows необходимо использовать следующий синтаксис PowerShell:

  $env:http_proxy = u0022[u003cPROTOCOLu003e://][u003cUSERNAMEu003e:u003cPASSWORDu003e]@u003cHOSTu003e[:u003cPORTu003e]u0022nn$env:https_proxy = u0022[u003cPROTOCOLu003e://][u003cUSERNAMEu003e:u003cPASSWORDu003e]@u003cHOSTu003e[:u003cPORTu003e]u0022n

Тогда в нашем примере:

  $env:http_proxy = u0022http://71.19.249.97:8443u0022nn$env:https_proxy = u0022http://71.19.249.97:8443u0022

Отныне каждая команда curl будет проходить через указанные прокси-серверы без необходимости добавлять опцию -x:

Опять же, будет возвращено:

  curl https://httpbin.org/ipnn{nn  u0022originu0022: u002271.19.249.97u0022nn}

Чтобы отключить прокси-серверы curl, отключите переменные окружения с помощью:

  unset http_proxynnunset https_proxy

Или в Windows:

  $env:http_proxy = u0022u0022nn$env:https_proxy = u0022u0022

curl вернется к стандартному поведению, а https://httpbin.org/ip теперь будет показывать ваш IP-адрес.

Использование файла конфигурации

Можно глобально указать прокси-сервер для curl, создав файл конфигурации .curlrc.

В Linux и macOS откройте терминал и перейдите в домашний каталог:

  cd ~

Затем войдите в файл .curlrc с помощью nano:

  nano .curlrc

Если файл уже существует, он будет открыт. В противном случае сначала он будет создан, а затем открыт.

Добавьте следующую строку в файл .curlrc:

  proxy=u0022http://71.19.249.97:8443u0022proxy=u0022http://71.19.249.97:8443u0022

Синтаксис этой инструкции:

  proxy=u0022[u003cPROTOCOLu003e://][u003cUSERNAMEu003e:u003cPASSWORDu003e]@u003cHOSTu003e[:u003cPORTu003e]u0022proxy=u0022[u003cPROTOCOLu003e://][u003cUSERNAMEu003e:u003cPASSWORDu003e]@u003cHOSTu003e[:u003cPORTu003e]u0022

Сохраните файл, закройте терминал и перезапустите его. 

В Windows необходимо создать файл _curlrc в каталоге %APPDATA% с тем же содержимым. Вставьте %APPDATA% в адресную строку файлового менеджера и нажмите ENTER для доступа к каталогу. 

Это должно привести вас к C:Users<YOUR_USER>AppDataRoaming.

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

  curl u0022http://httpbin.org/ipu0022curl u0022http://httpbin.org/ipu0022

Вы получите:

  {nn  u0022originu0022: u002271.19.249.97u0022nn}nn

Фантастика! Вы только что узнали, как использовать curl с прокси-серверами тремя разными способами!

Как настроить прокси-сервер SOCKS в curl

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

  curl -x [u003cPROTOCOLu003e://][u003cUSERNAMEu003e:u003cPASSWORDu003e]@u003cHOSTu003e[:u003cPORTu003e] u003cURLu003ecurl -x [u003cPROTOCOLu003e://][u003cUSERNAMEu003e:u003cPASSWORDu003e]@u003cHOSTu003e[:u003cPORTu003e] u003cURLu003e

Основное отличие состоит в том, что <PROTOCOL> будет выглядеть как socks4, socks4a, socks5 или socks5h вместо http и https.

Полный пример прокси-сервера SOCKS curl в действии:

  curl -x u0022socks5://94.14.109.54:2478u0022 u0022http://httpbin.org/ipu0022curl -x u0022socks5://94.14.109.54:2478u0022 u0022http://httpbin.org/ipu0022

Как и следовало ожидать, результат будет следующим:

  {nn  u0022originu0022: u002294.14.109.54u0022nn}

Альтернативный подход предполагает использование опций командной строки --socks4, --socks4a, --socks5 вместо -x. В этом случае вы должны указать URL-адрес прокси-сервера без имени пользователя и пароля после опции, а затем учетные данные после --proxy-user:

  curl u002du002dsocks4|u002du002dsocks4a|u002du002dsocks5 u003cHOSTu003e[:u003cPORTu003e] u003cURLu003e u002du002dproxy-user u003cUSERNAMEu003e:u003cPASSWORDu003ecurl u002du002dsocks4|u002du002dsocks4a|u002du002dsocks5 u003cHOSTu003e[:u003cPORTu003e] u003cURLu003e u002du002dproxy-user u003cUSERNAMEu003e:u003cPASSWORDu003e

Например:

  curl u002du002dsocks4 u002293.16.238.41:8721u0022 u0022http://httpbin.org/ipu0022 u002du002dproxy-user admin334:kv4NsDgc3curl u002du002dsocks4 u002293.16.238.41:8721u0022 u0022http://httpbin.org/ipu0022 u002du002dproxy-user admin334:kv4NsDgc3

Подключение к HttpBin будет осуществлено через прокси-сервер 93.16.238.41:8721 socks4 с использованием admin334 в качестве имени пользователя и kv4NsDgc3 в качестве пароля для аутентификации.

Необходимые советы и рекомендации

В этом разделе вы найдете интересные приемы и ценные советы по работе с прокси-серверами curl на профессиональном уровне.

Быстрое включение и выключение прокси

Идея состоит в том, чтобы определить псевдонимы для программной установки и отключения прокси с помощью переменных среды с помощью специальных команд. 

В macOS и Linux это можно сделать, создав файл .bashrc. Это файл сценария, который выполняется при каждом входе пользователя в систему.

Перейдите в домашнюю папку:

  cd ~

Затем создайте или откройте файл .bashrc:

  nano .bashrc

Добавьте содержимое в файл в следующем формате:

  alias proxyon=u0022export http_proxy='[u003cPROTOCOLu003e://][u003cUSERNAMEu003e:u003cPASSWORDu003e]@u003cHOSTu003e[:u003cPORTu003e]';export https_proxy='[u003cPROTOCOLu003e://][u003cUSERNAMEu003e:u003cPASSWORDu003e]@u003cHOSTu003e[:u003cPORTu003e]'u0022nalias proxyoff=u0022unset http_proxy;unset https_proxyu0022alias proxyon=u0022export http_proxy='[u003cPROTOCOLu003e://][u003cUSERNAMEu003e:u003cPASSWORDu003e]@u003cHOSTu003e[:u003cPORTu003e]';export https_proxy='[u003cPROTOCOLu003e://][u003cUSERNAMEu003e:u003cPASSWORDu003e]@u003cHOSTu003e[:u003cPORTu003e]'u0022alias proxyoff=u0022unset http_proxy;unset https_proxyu0022

Таким образом, в нашем примере это будет:

  alias proxyon=u0022export http_proxy='http://71.19.249.97:8443';export https_proxy='http://71.19.249.97:8443'u0022nnalias proxyoff=u0022unset http_proxy;unset https_proxyu0022

Сохраните файл и перезагрузите компьютер.

Теперь вы можете активировать и деактивировать прокси-сервер curl с помощью:

  proxyonnncurl u0022http://httpbin.org/ipu0022nn# other HTTP requests...nnproxyoff

Обратите внимание на специальные команды proxyon и proxyoff. Они выполняют операции, указанные в псевдонимах в файле .bashrc.

В Windows вы можете добиться чего-то подобного с помощью псевдонимов PowerShell.

Игнорирование прокси для одного запроса

Если вы хотите запретить curl использовать настроенный прокси-сервер для определенного запроса, вы можете воспользоваться аргументом --noproxy "*“, как показано ниже:

  curl u002du002dnoproxy u0022*u0022 u003cURLu003ecurl u002du002dnoproxy u0022*u0022 u003cURLu003e

Это предписывает curl не использовать прокси для всех URL-адресов.

Настройте прокси-сервер и запустите его:

  curl u002du002dnoproxy u0022*u0022 u0022https://httpbin.org/ipu0022curl u002du002dnoproxy u0022*u0022 u0022https://httpbin.org/ipu0022

Полученный источник будет содержать ваш IP-адрес, а не IP-адрес прокси-сервера.

Как избежать ошибок SSL-сертификата

При использовании прокси-серверов в curl ваши запросы могут не выполняться из-за ошибок SSL-сертификата. Чтобы избежать этого, используйте опцию -k, как показано в приведенном ниже синтаксисе:

  curl -x [u003cPROTOCOLu003e://][u003cUSERNAMEu003e:u003cPASSWORDu003e]@u003cHOSTu003e[:u003cPORTu003e] -k u003cURLu003ecurl -x [u003cPROTOCOLu003e://][u003cUSERNAMEu003e:u003cPASSWORDu003e]@u003cHOSTu003e[:u003cPORTu003e] -k u003cURLu003e

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

Например, вы можете связываться с HTTPBin, обходя проблемы с SSL, с помощью следующего:

  curl -x u0022http://71.19.249.97:8443u0022 -k u0022https://httpbin.org/ipu0022curl -x u0022http://71.19.249.97:8443u0022 -k u0022https://httpbin.org/ipu0022

Получение дополнительной информации о запросе

Когда запрос в curl завершается неудачно, понять, что произошло, непросто. Чтобы диагностировать ошибку и просмотреть все операции, выполняемые curl, установите опцию -v:

  curl -x [u003cPROTOCOLu003e://][u003cUSERNAMEu003e:u003cPASSWORDu003e]@u003cHOSTu003e[:u003cPORTu003e] -v u003cURLu003ecurl -x [u003cPROTOCOLu003e://][u003cUSERNAMEu003e:u003cPASSWORDu003e]@u003cHOSTu003e[:u003cPORTu003e] -v u003cURLu003e

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

  $curl -x u0022http://71.19.249.97:8443u0022 -v u0022https://httpbin.org/ipu0022nn*   Trying 71.19.249.97:8443...nn* Connected to 71.19.249.97 (71.19.249.97) port 8443 (#0)nn* allocate connect buffernn* Establish HTTP proxy tunnel to httpbin.org:443nnu003e CONNECT httpbin.org:443 HTTP/1.1nnu003e Host: httpbin.org:443nnu003e User-Agent: curl/8.0.1nnu003e Proxy-Connection: Keep-Alivennu003ennu003c HTTP/1.0 200 OKnnu003cnn* CONNECT phase completednn* CONNECT tunnel established, response 200nn* schannel: disabled automatic use of client certificatenn* ALPN: offers http/1.1nn* ALPN: server accepted http/1.1nn* using HTTP/1.1nnu003e GET /ip HTTP/1.1nnu003e Host: httpbin.orgnnu003e User-Agent: curl/8.0.1nnu003e Accept: */*nnu003ennu003c HTTP/1.1 200 OKnnu003c Date: Sat, 26 Aug 2023 10:39:13 GMTnnu003c Content-Type: application/jsonnnu003c Content-Length: 31nnu003c Connection: keep-alivennu003c Server: gunicorn/19.9.0nnu003c Access-Control-Allow-Origin: *nnu003c Access-Control-Allow-Credentials: truennu003cnn{nn  u0022originu0022: u002271.19.249.97u0022nn}nn* Connection #0 to host 71.19.249.97 left intactn

Какие прокси-серверы лучше всего подходят для curl?

Ответ на этот вопрос зависит от вашего варианта использования и характера запросов curl, которые вы должны сделать. Чтобы найти подходящее решение для ваших нужд, ознакомьтесь с различными типами доступных прокси-серверов:

  • Прокси-серверы центров обработки данных: они быстрые, но сайты могут легко обнаружить и заблокировать их из-за их идентифицируемых диапазонов IP-адресов.
  • Резидентные прокси: они гарантируют высокий уровень анонимности, поскольку предлагают IP-адреса, поступающие с реальных устройств в определенных местах. Резидентные прокси-серверы идеально подходят для доступа к сайтам, использующим географические ограничения или меры защиты от ботов, а также для выполнения веб-скрейпинга с помощью curl.
  • Прокси-серверы интернет-провайдеров (ISP): они безопасны, быстры и очень надежны, поскольку предоставляют IP-адреса с устройств, зарегистрированных у интернет-провайдеров. Прокси-серверы ISP представляют собой идеальное решение для SEO-мониторинга, просмотра веб-страниц и исследования рынка.
  • Мобильные прокси-серверы: они предоставляют IP-адреса с реальных мобильных устройств для обеспечения высокого уровня анонимности. Они полезны для доступа к специально разработанным для мобильных устройств приложениям, сайтам или контенту.

Это был лишь краткий обзор, но вы можете найти дополнительную информацию в нашем руководстве по типам IP-адресов прокси-серверов.

Заключение

В этом руководстве по прокси-серверу curl вы узнали, что такое cURL, что он может предложить, а также как настроить прокси-сервер HTTP/HTTPS/SOCKS. Как оказалось, нельзя полагаться на работу curl с прокси-серверами от бесплатных поставщиков. Таким образом, основное техническое решение заключается в том, какого поставщика прокси выбрать. Экономьте время и энергию и обращайтесь к Bright Data — лучшей компании на рынке в этой области.

Bright Data управляет лучшими прокси-серверами в мире, обслуживая компании из списка Fortune 500 и более 20 000 клиентов. Ее всемирная сеть прокси-серверов включает в себя:

  • Прокси-серверы для центров обработки данных — более 770 000 IP-адресов центров обработки данных.
  • Резидентные прокси-серверы — более 72 млн резидентных IP-адресов в более чем 195 странах.
  • Прокси-серверы интернет-провайдеров — более 700 000 IP-адресов интернет-провайдеров.
  • Мобильные прокси-серверы — более 7 млн мобильных IP-адресов.

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