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

Используйте это подробное руководство с фрагментами кода, чтобы начать использовать cURL с прокси-серверами.
4 min read
Using proxies with cURL featured image

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

Что такое 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 --version

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

curl 8.0.1 (Windows) libcurl/8.0.1 Schannel WinIDN

Release-Date: 2023-03-20

Protocols: dict file ftp ftps http https imap imaps pop3 pop3s smtp smtps telnet tftp

Features: AsynchDNS HSTS HTTPS-proxy IDN IPv6 Kerberos Largefile NTLM SPNEGO SSL SSPI threadsafe Unicode UnixSockets

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

Linux

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

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

sudo apt-get install curl

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

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

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

[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]

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

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

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

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

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

IP Address: 71.19.249.97; Port: 8443

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

http://71.19.249.97:8443

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

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

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

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

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

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

curl "https://httpbin.org/ip"

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

curl [optional_commands] <URL>

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

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

{

  "origin": "194.33.243.7"

}

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

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

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

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

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

  • -x
  • --proxy

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

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

curl -x [<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>] <URL>

Или:

curl --proxy [<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>] <URL>

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

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

curl -x "http://71.19.249.97:8443" "https://httpbin.org/ip"

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

curl --proxy "http://71.19.249.97:8443" "https://httpbin.org/ip"

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

{

  "origin": "71.19.249.97"

}

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

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

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

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

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

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

export http_proxy="[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"

export https_proxy="[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"

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

export http_proxy="http://71.19.249.97:8443"

export https_proxy="http://71.19.249.97:8443"

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

$env:http_proxy = "[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"

$env:https_proxy = "[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"

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

$env:http_proxy = "http://71.19.249.97:8443"

$env:https_proxy = "http://71.19.249.97:8443"

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

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

curl https://httpbin.org/ip

{

  "origin": "71.19.249.97"

}

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

unset http_proxy

unset https_proxy

Или в Windows:

$env:http_proxy = ""

$env:https_proxy = ""

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

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

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

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

cd ~

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

nano .curlrc

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

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

proxy="http://71.19.249.97:8443"

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

proxy="[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"

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

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

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

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

curl "http://httpbin.org/ip"

Вы получите:

{

  "origin": "71.19.249.97"

}

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

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

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

curl -x [<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>] <URL>

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

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

curl -x "socks5://94.14.109.54:2478" "http://httpbin.org/ip"

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

{

  "origin": "94.14.109.54"

}

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

curl --socks4|--socks4a|--socks5 <HOST>[:<PORT>] <URL> --proxy-user <USERNAME>:<PASSWORD>

Например:

curl --socks4 "93.16.238.41:8721" "http://httpbin.org/ip" --proxy-user admin334:kv4NsDgc3

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

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

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

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

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

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

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

cd ~

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

nano .bashrc

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

alias proxyon="export http_proxy='[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]';export https_proxy='[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]'"
alias proxyoff="unset http_proxy;unset https_proxy"

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

alias proxyon="export http_proxy='http://71.19.249.97:8443';export https_proxy='http://71.19.249.97:8443'"

alias proxyoff="unset http_proxy;unset https_proxy"

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

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

proxyon

curl "http://httpbin.org/ip"

# other HTTP requests...

proxyoff

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

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

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

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

curl --noproxy "*" <URL>

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

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

curl --noproxy "*" "https://httpbin.org/ip"

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

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

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

curl -x [<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>] -k <URL>

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

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

curl -x "http://71.19.249.97:8443" -k "https://httpbin.org/ip"

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

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

curl -x [<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>] -v <URL>

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

$curl -x "http://71.19.249.97:8443" -v "https://httpbin.org/ip"

*   Trying 71.19.249.97:8443...

* Connected to 71.19.249.97 (71.19.249.97) port 8443 (#0)

* allocate connect buffer

* Establish HTTP proxy tunnel to httpbin.org:443

> CONNECT httpbin.org:443 HTTP/1.1

> Host: httpbin.org:443

> User-Agent: curl/8.0.1

> Proxy-Connection: Keep-Alive

>

< HTTP/1.0 200 OK

<

* CONNECT phase completed

* CONNECT tunnel established, response 200

* schannel: disabled automatic use of client certificate

* ALPN: offers http/1.1

* ALPN: server accepted http/1.1

* using HTTP/1.1

> GET /ip HTTP/1.1

> Host: httpbin.org

> User-Agent: curl/8.0.1

> Accept: */*

>

< HTTP/1.1 200 OK

< Date: Sat, 26 Aug 2023 10:39:13 GMT

< Content-Type: application/json

< Content-Length: 31

< Connection: keep-alive

< Server: gunicorn/19.9.0

< Access-Control-Allow-Origin: *

< Access-Control-Allow-Credentials: true

<

{

  "origin": "71.19.249.97"

}

* Connection #0 to host 71.19.249.97 left intact

Какие прокси-серверы лучше всего подходят для 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-адресов.

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