Из этого руководства вы узнаете:
- Базовый синтаксис скачивания файлов cURL
- Как обрабатывать более сложные сценарии при скачивании файлов с помощью cURL
- Как скачивать несколько файлов одновременно
- Некоторые рекомендации по эффективному использованию cURL
- Краткое сравнение cURL и Wget
Давайте рассмотрим эти вопросы подробнее!
Базовый синтаксис скачивания файлов с помощью cURL
Это самый простой синтаксис скачивания файлов с помощью cURL:
curl -O <file_url>
Примечание: в Windows замените curl
на curl.exe
. Это необходимо, потому что curl
является псевдонимом для Invoke-WebRequest
в Windows PowerShell, а curl.exe
явно запускает средство командной строки cURL.
Флаг -O
предписывает cURL сохранить скачанный файл с исходным именем по URL-адресу, указанному в <file_url>
. Аналогично, вы можете использовать --remote-name
:
curl --remote-name <file_url>
Например, рассмотрим следующую команду скачивания файла cURL:
curl -O "https://i.imgur.com/CSRiAeN.jpg"
В результате появится индикатор выполнения скачивания, как показано ниже:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 35354 100 35354 0 0 155k 0 --:--:-- --:--:-- --:--:-- 158k
Когда прогресс достигнет 100%, в папке, где вы выполнили команду cURL, появится файл с именем CSRiAeN.jpg
:
Для получения дополнительной информации о том, что такое cURL и какие возможности он предлагает, прочитайте наше руководство по cURL. Пора изучить более сложные сценарии!
Использование cURL для скачивания файла: дополнительные параметры
Теперь, когда вы знаете базовый синтаксис скачивания файлов с помощью cURL, вы готовы научиться настраивать команду с помощью дополнительных опций.
Изменение имени скачанного файла
По умолчанию опция -O
скачивает файл, указанный в целевом URL-адресе, под исходным именем. Если удаленный файл, указанный в URL-адресе, не содержит имени, cURL создает файл без расширения с именем curl_response
:
cURL также напечатает предупреждение, информирующее вас о таком поведении:
Warning: No remote file name, uses "curl_response"
Чтобы указать собственное имя для скачивемого файла, используйте флаг -o
(или --output
), как показано здесь:
curl "https://i.imgur.com/CSRiAeN.jpg" -o "logo.jpg"
Эта команда предписывает cURL выполнить запрос GET к указанному URL-адресу файла. Затем скачанное содержимое сохраняется под именем, указанным после -o
, а не печатает его в stdout.
На этот раз выходным файлом будет файл logo.jpg
:
Следите за перенаправлениями
Некоторые URL-адреса не указывают напрямую на нужный файл и требуют автоматической переадресации для получения конечного адреса.
Чтобы научить cURL следовать перенаправлениям, вам необходимо использовать опцию -L
:
curl -O -L "<file_url>"
Без флага -L
cURL выводит заголовки ответа на перенаправление (например, 301 Перемещено навсегда
или 302 Найдено
). В частности, оно не будет автоматически следовать новому местоположению, указанному в заголовке Location
.
Аутентификация на сервере
Некоторые серверы ограничивают доступ к своим ресурсам и требуют аутентификации пользователя. Для выполнения базовой аутентификации HTTP или FTP вы можете использовать опцию -u
(или --user
). Она позволяет указать имя пользователя и пароль в следующем формате:
<username>:<password>
Имя пользователя и пароль разделены двоеточием (:
), что делает невозможным включение двоеточия в имя пользователя. Вместо этого пароль может содержать двоеточие.
Строка <password>
является необязательной. Если вы укажете только имя пользователя, cURL предложит ввести пароль.
Ниже приведен синтаксис скачивания файла с помощью cURL с использованием аутентификации сервера:
curl -O -u <username>:<password> <file_url>
Например, вы можете скачать файл .png
с URL-адреса с аутентификацией с помощью следующей команды:
curl -O -u "myUser:myPassword" "https://example.com/secret.txt"
cURL выполнит аутентификацию на сервере, используя myUser
и myPassword
в качестве учетных данных. Затем он скачает файл secret.txt
.
Установка ограничений пропускной способности
По умолчанию cURL скачивает файл, используя полную доступную полосу пропускания, что не всегда желательно. Для управления скоростью скачивания вы можете использовать опцию --limit-rate
, а затем максимальную скорость скачивания, которую вы хотите установить:
curl -O --limit-rate 5k "https://i.imgur.com/CSRiAeN.jpg"
Результат будет выглядеть примерно так:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 35354 100 35354 0 0 5166 0 0:00:06 0:00:06 --:--:-- 5198
Обратите внимание, что скорость скачивания (5198 байт в секунду, что соответствует 5 КБ в секунду) соответствует скорости, указанной в опции. Это происходит, даже если обычная скорость скачивания вашего компьютера превышает значение, заданное параметром --limit-rate
.
--limit-rate
полезно для управления использованием полосы пропускания, чтобы избежать перегрузки сети, соблюдения ограничений полосы пропускания или моделирования более медленных сетевых условий для тестирования.
Скачивание через прокси-сервер
Когда вы выполняете запрос на скачивание с помощью cURL, ваш IP-адрес передается целевому серверу. Это проблема, если вы хотите сохранить конфиденциальность или избежать мер по борьбе с ботами, таких как ограничение скорости.
Чтобы скрыть свой IP-адрес и направить запрос через прокси-сервер, используйте опцию -x
(или --proxy
) в команде cURL:
curl -x <proxy_url> -O <file_url>
<proxy_url>
необходимо указать в следующем формате:
[protocol://]host[:port]
Обратите внимание, что URL-адрес прокси-сервера может отличаться в зависимости от того, используете ли вы прокси-сервер HTTP, HTTPS или SOCKS. Более подробные инструкции см. в нашем руководстве по интеграции прокси-сервера cURL.
Например, если вы используете прокси-сервер HTTP, команда будет выглядеть следующим образом:
curl -x "http://proxy.example.com:8080" -O "https://i.imgur.com/CSRiAeN.jpg"
Выполнение скачивания в фоне
По умолчанию команда «cURL download file» отображает индикатор выполнения или сообщение об ошибке в случае сбоя. Чтобы отключить эти выводы, вы можете включить «молчаливый» или «тихий» режим, используя опцию -s
(или --silent
):
curl -O -s "https://i.imgur.com/CSRiAeN.jpg"
Это заставит cURL работать без выдачи сообщений. В случае успешного скачивания файл появится в текущем каталоге, но в терминале не будет обратной связи.
Печать подробной словесной информации
В случае ошибки или для лучшего понимания того, что cURL делает за кулисами, рекомендуется включить режим словесной информации, используя опцию -v
(или --verbose
):
curl -O -v "https://i.imgur.com/CSRiAeN.jpg"
При выполнении команды вы увидите дополнительные выходные данные, содержащие подробную информацию о процессе отправки запроса и получения ответа:
* IPv6: (none)
* IPv4: 146.75.52.193
* Trying 146.75.52.193:443...
* schannel: disabled automatic use of client certificate
* ALPN: curl offers http/1.1
* ALPN: server accepted http/1.1
* Connected to i.imgur.com (146.75.52.193) port 443
* using HTTP/1.x
> GET /CSRiAeN.jpg HTTP/1.1
> Host: i.imgur.com
> User-Agent: curl/8.10.1
> Accept: */*
>
* Request completely sent off
* schannel: failed to decrypt data, need more data
< HTTP/1.1 200 OK
< Connection: keep-alive
< Content-Length: 35354
< Content-Type: image/jpeg
< Last-Modified: Wed, 08 Jan 2025 08:02:49 GMT
< ETag: "117b93e0521ba1313429bad28b3befc8"
< x-amz-server-side-encryption: AES256
< X-Amz-Cf-Pop: IAD89-P1
< X-Amz-Cf-Id: wTQ20stgw0Ffl1BRmhRhFqpCXY_2hnBLbPXn9D8LgPwdjL96xarRVQ==
< cache-control: public, max-age=31536000
< Accept-Ranges: bytes
< Age: 2903
< Date: Wed, 08 Jan 2025 08:51:12 GMT
< X-Served-By: cache-iad-kiad7000028-IAD, cache-lin1730072-LIN
< X-Cache: Miss from cloudfront, HIT, HIT
< X-Cache-Hits: 1, 0
< X-Timer: S1736326272.410959,VS0,VE1
< Strict-Transport-Security: max-age=300
< Access-Control-Allow-Methods: GET, OPTIONS
< Access-Control-Allow-Origin: *
< Server: cat factory 1.0
< X-Content-Type-Options: nosniff
<
{ [1371 bytes data]
100 35354 100 35354 0 0 212k 0 --:--:-- --:--:-- --:--:-- 214k
* Connection #0 to host i.imgur.com left intact
Сюда входят сведения о подключении, заголовки запросов, заголовки ответов и дополнительная информация о ходе скачивания.
Настройка упрощенного индикатора выполнения
Стандартный индикатор выполнения скачивания файла cURL может не соответствовать вашим потребностям. Вы можете включить более простой индикатор выполнения с помощью опции -#
(или --progress-bar
):
curl -O -# "https://i.imgur.com/CSRiAeN.jpg"
Появится индикатор выполнения с символом #
, который будет постепенно заполняться по мере скачивания файла:
########################################################### 100.0%
Панель #
обеспечивает более минималистичное представление о ходе скачивания по сравнению с выводом прогресса cURL по умолчанию.
Как скачать несколько файлов с помощью cURL
Вы только что видели, как скачать файл с помощью cURL, но что насчет скачивания нескольких файлов с помощью одной команды? Уделите время изучению этого!
Скачивание файлов из диапазона
cURL поддерживает скачивание нескольких файлов одновременно с помощью расширения URL-адресов. В частности, можно скачать несколько файлов с одним и тем же удаленным URL-адресом, указав их в фигурных скобках {}
:
curl -O "https://example.com/images/{1.jpg,2.jpg,3.jpg}"
Это позволит скачать три указанных файла:
1.jpg
2.jpg
3.jpg
Обратите внимание, что файлы, указанные в {}
, могут иметь разные расширения.
Аналогично, вы можете использовать синтаксис с квадратными скобками []
:
curl -O "https://example.com/files/file[1-3].jpg"
Это даст тот же результат, что и в первом примере. В этом случае все файлы в []
должны иметь одно и то же расширение.
Примечание: если вы включите собственные параметры (например, -s
для беззвучного режима или --limit-rate
для ограничения полосы пропускания), они будут применены ко всем скачиваемым файлам.
Скачивание нескольких файлов
Чтобы скачать файлы с разных URL-адресов, вам необходимо несколько раз указать опцию -O
:
curl -O "https://i.imgur.com/CSRiAeN.jpg" -O "https://brightdata.com/wp-content/uploads/2020/12/upload_blog_20201220_153903.svg"
Эта команда скачает CSRiAeN.jpg
с сайта i.imgur.com
и upload_blog_20201220_153903.jpg
с сайта brightdata.com
.
Выходные данные будут содержать панель скачивания для каждого заданного URL-адреса:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 35354 100 35354 0 0 271k 0 --:--:-- --:--:-- --:--:-- 276k
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 22467 0 22467 0 0 34657 0 --:--:-- --:--:-- --:--:-- 34724
Аналогичным образом можно использовать несколько опций -o
:
curl "https://i.imgur.com/CSRiAeN.jpg" -o "logo.jpg" "https://brightdata.com/wp-content/uploads/2020/12/upload_blog_20201220_153903.svg" -o "blog_post.svg"
Вышеуказанная команда скачает CSRiAeN.jpg
и сохранит его как logo.jpg
, а затем скачает upload_blog_20201220_153903.svg
и сохранит его как blog_post.svg
.
Имейте в виду, что вы также можете совмещать варианты -O
и -o
:
curl "https://i.imgur.com/CSRiAeN.jpg" -o "logo.jpg" -O "https://brightdata.com/wp-content/uploads/2020/12/upload_blog_20201220_153903.svg"
При этом скачивается logo.jpg
, как и раньше, и upload_blog_20201220_153903.svg
с исходным именем файла.
Обратите внимание, что другие опции, такие как -v
, -s
или --limit-rate
, применяются ко всем URL-адресам по-разному, поэтому их необходимо указать один раз.
Рекомендации по загрузке скачиванию с помощью cURL
Ниже приведен список некоторых наиболее важных рекомендаций по скачиванию файлов с помощью cURL:
- Используйте
curl.exe
вместо curl в Windows: в Windows используйтеcurl.exe
вместоcurl
, чтобы избежать конфликта с командлетомInvoke-WebRequest
. - Игнорируйте ошибки HTTPS и SSL/TLS (с осторожностью): используйте опцию
-k
(или--insecure
), чтобы игнорировать ошибки проверки сертификатов SSL/TLS. В то же время имейте в виду, что это ставит под угрозу безопасность и должно использоваться только в доверенных средах. - Указывайте правильные методы HTTP: при выполнении запросов используйте соответствующий HTTP-метод, например GET, POST или PUT. Этот метод влияет на то, как сервер отвечает на ваш запрос. Используйте опцию
-X
, чтобы указать метод. - Заключайте URL-адреса в кавычки и избегайте специальных символов: для правильной обработки специальных символов всегда заключайте URL-адреса в одинарные или двойные кавычки. Используйте символы escape (
\
), чтобы избежать проблем с пробелами, амперсандами и другими специальными символами в URL-адресах. - Укажите прокси-сервер для защиты вашей личности: используйте опцию
-x
(или--proxy
) для маршрутизации запросов cURL через прокси-сервер. Это помогает защитить ваш IP-адрес и сохранить конфиденциальность при парсинге или скачивании файлов. - Сохраняйте и повторно используйте файлы cookie в разных запросах: используйте опции
-c
и-b
для сохранения и повторного использования файлов cookie в последующих запросах. Это помогает поддерживать постоянство сеанса и может быть полезно для аутентификации или отслеживания. - Ограничьте скорость скачивания для лучшего контроля: используйте опцию
--limit-rate
, чтобы контролировать скорость скачивания и не перегружать сетевое соединение и предотвратить активацию ограничений частоты скорости на сервере. - Добавьте подробный вывод для отладки: включите подробный режим с помощью опции
-v
, чтобы получить подробную информацию о запросе и ответе. Это может быть полезно для отладки и устранения неполадок. - Проверка ответов на ошибки: всегда проверяйте коды ответов HTTP, используя опцию
-w
, чтобы убедиться, что скачивание файла прошло успешно (например,200 OK
) или произошла ли ошибка (например,404 Не найдено
).
cURL и Wget для скачивания файлов
cURL и Wget являются инструментами командной строки для получения файлов с удаленных серверов. Основное различие между ними заключается в следующем:
- Wget предназначен для скачивания файлов из Интернета. Он поддерживает HTTP, HTTPS, FTP и многие другие протоколы. Wget известен своей способностью рекурсивно скачивать файлы, возобновлять прерванные закачки и хорошо работать в фоновом режиме. Посмотрите, как использовать его для скачивания веб-страниц с помощью Python.
- cURL — это универсальный инструмент командной строки, используемый для передачи данных на сервер и с сервера с использованием различных интернет-протоколов. Он обычно используется для тестирования конечных точек, выполнения простых HTTP-запросов и скачивания отдельных файлов. cURL также можно использовать для веб-парсинга.
Основное различие между cURL и Wget заключается в том, что cURL обеспечивает более детальный контроль над передачей данных. В частности, он поддерживает настраиваемые заголовки, аутентификацию и другие протоколы. Напротив, Wget проще и лучше подходит для массовых скачиваний, рекурсии и обработки прерванных передач.
Заключение
Из этого руководства вы узнали, как скачивать файлы с помощью cURL. Вы начали с базового синтаксиса скачивания файлов с помощью cURL и изучили более сложные сценарии и варианты использования. Теперь вы знаете, как выполнить парсинг одного или несколько файлов с помощью cURL.
Имейте в виду, что каждый раз, когда вы делаете HTTP-запрос, вы оставляете следы в Интернете. Чтобы защитить свою личность, конфиденциальность и повысить безопасность, вам следует рассмотреть возможность интеграции прокси-сервера с cURL. К счастью, Bright Data поможет вам!
Bright Data управляет лучшими прокси-серверами в мире, обслуживая компании из списка Fortune 500 и более 20 000 клиентов. Ее всемирная сеть прокси-серверов включает в себя:
- Прокси центров обработки данных — более 770 000 IP-адресов центров обработки данных.
- Резидентные прокси — более 72 млн резидентных IP-адресов в более чем 195 странах.
- Прокси-серверы интернет-провайдеров — более 700 000 IP-адресов интернет-провайдеров.
- Мобильные прокси — более 7 млн мобильных IP-адресов.
В целом, это одна из крупнейших и самых надежных на рынке прокси-сетей, ориентированных на парсинг.
Зарегистрируйтесь сейчас и протестируйте наши прокси и решения для парсинга бесплатно!
Кредитная карта не требуется