Как скачивать файлы с помощью cURL: флаги, решения и скрипты

Последнее обновление: August 11, 2026
Hand-drawn file download flowing from a terminal window into a verified folder
AI-сводка
Практическое руководство по скачиванию файлов с cURL: редиректы, аутентификация, повторные попытки, возобновление загрузки, пакетные скрипты, проверка файлов и типичные ошибки.

Я потратил неприлично много поздних вечеров на отладку скриптов, которые должны были всего лишь «забрать файл и идти дальше». В девяти случаях из десяти виноват был cURL — он делал ровно то, что я ему сказал, а не то, что мне действительно было нужно. Оказалось, между «curl -O работает» и «curl -O надёжно работает в продакшене» — целая пропасть.

Именно для этого и написан этот гайд. cURL предустановлен на macOS, большинстве дистрибутивов Linux, а также в Windows 10 и новее, так что с большой вероятностью он уже есть у вас на компьютере. Но между тихо провалившимися редиректами, загадочными 403-ошибками и переходом от «скачать один файл» к «скачать 500 файлов, не положив терминал» легко застрять. Я покажу флаги, которые действительно важны, пошаговые команды, которыми пользуюсь сам, ошибки, на которых чаще всего спотыкаются люди, и момент, когда cURL уже не помогает — и что использовать вместо него.

Что такое cURL и почему он вообще вам нужен?

cURL — это бесплатный инструмент с открытым исходным кодом для работы из командной строки, который передаёт данные на сервер или с сервера по URL. Он поддерживает HTTP, HTTPS, FTP, SFTP и ещё длинный список протоколов, поэтому встречается буквально везде: от bash-скриптов и Dockerfile до CI-пайплайнов. Под капотом команда curl, которую вы вводите в терминале, использует libcurl — библиотеку на C, встроенную во множество приложений и языковых обёрток. Например, расширение cURL в PHP — это один из таких случаев; а популярная библиотека Requests в Python — отдельный HTTP-клиент, построенный на urllib3, а не на libcurl.

На момент написания актуальный стабильный релиз — curl 8.21.0, выпущенный в июне 2026 года, хотя не стоит рассчитывать, что именно эта сборка идёт в комплекте с вашей ОС. Версии curl, поставляемые через дистрибутивы, часто отстают от upstream-проекта на месяцы, а иногда и дольше, поэтому перед использованием флага вроде --parallel лучше проверить curl --version.

Зачем скачивать файлы через cURL? Основные сценарии

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

СценарийЧем хорош cURL
Скачивание бинарников в CI/CD-пайплайнахМожно скриптовать, GUI не нужен
Получение ответов API или экспортов данныхПоддерживает заголовки, авторизацию и вывод в пайп
Возобновление больших загрузок по SSHВстроенная поддержка продолжения загрузки (-C -)
Автоматизация регулярных загрузок (cron-задачи)Лёгкий, удобно сочетается с shell-скриптами
Скачивание файлов за авторизациейГибкие флаги аутентификации (basic, token, cookies, .netrc)

Загрузка через браузер — это разовое ручное действие. cURL превращает то же самое в повторяемый процесс: его можно запланировать, встроить в цепочку команд, повторить при сбое и запустить одинаково на сотне серверов одновременно. В этом и смысл — не в «крутизне», а в воспроизводимости.

Hand-drawn flow from a web source to a downloaded file and local folder

Основные флаги cURL для скачивания файлов

Я постоянно возвращаюсь примерно к дюжине флагов — они закрывают 90% всех задач. Ниже — шпаргалка, которую мне самому хотелось получить много лет назад, сгруппированная по назначению.

Флаги для вывода и сохранения файлов

  • -O (--remote-name) сохраняет файл под именем, которое соответствует последней части URL. Удобно, но может молча перезаписать уже существующий файл с тем же именем.
  • -o <filename> (--output) позволяет задать точное имя файла самому: curl -o report.pdf https://example.com/downloads/file.pdf.
  • -J (--remote-header-name) берёт имя файла из заголовка Content-Disposition на стороне сервера вместо URL. Это удобно для загрузок через API, но относитесь к имени, пришедшему с сервера, как к недоверенному вводу — лучше скачивать в отдельную папку, а не в домашний каталог, как рекомендует сам curl в документации по безопасности.

Обязательные флаги поведения для любой загрузки

  • -L (--location) заставляет curl следовать за HTTP-редиректами. Без него ответ 3xx сохранится как крошечная HTML-страница перенаправления вместо нужного файла — это самая частая ошибка в стиле «почему моя загрузка сломалась».
  • -C - (--continue-at -) возобновляет прерванную загрузку с того места, где она остановилась.
  • -s / -S работают тихо, но всё равно показывают ошибки — отлично для скриптов, где не нужен прогресс-бар в логах.
  • --limit-rate 1M ограничивает скорость передачи (полезно на общих каналах или когда не хочется забивать лимитированный интернет).
  • --connect-timeout 10 и --max-time 300 не дают зависшему соединению повесить ваш скрипт навсегда.
  • --retry 3 и --retry-delay 5 автоматически повторяют запрос при временных сбоях — по man-странице curl, сочетайте это с --retry-all-errors только если повторять тот же запрос действительно безопасно.

Флаги для прогресса и отладки

  • -# показывает простой индикатор прогресса вместо стандартной таблицы статистики.
  • -v выводит подробный лог, включая все заголовки запроса и ответа — мой любимый вариант, когда что-то идёт не так.
  • -I (--head) запрашивает только заголовки ответа — отличный предварительный тест перед большой загрузкой.
  • -w позволяет вывести после передачи свой форматированный результат, например curl -o /dev/null -s -w "%{http_code}\n" <url>, чтобы просто проверить HTTP-код.

Перед началом

  • Сложность: от начального до среднего уровня (разделы про пакетную загрузку и авторизацию чуть сложнее)
  • Время: примерно 15–20 минут, чтобы пройтись по основным командам
  • Что понадобится: терминал (macOS Terminal, shell в Linux или Windows PowerShell/WSL), установленный curl (проверьте через curl --version) и тестовый URL — для примера я буду использовать публичный asset из релиза на GitHub, потому что он стабильный и свободно доступен

Как скачивать файлы с cURL: пошагово

Шаг 1: Скачайте один файл

Самая база: curl -O <url> сохраняет файл под его исходным именем, а curl -o myfile.zip <url> позволяет переименовать его на лету.

curl -LO https://github.com/curl/curl/releases/download/curl-8_21_0/curl-8.21.0.tar.gz

Теперь я по умолчанию всегда добавляю -L — без исключений. Меня слишком много раз подводил редирект, который незаметно превращал мою «загрузку» в HTML-файл на 400 байт. В терминале вы должны увидеть индикатор прогресса, который дойдёт до конца, а затем файл окажется в текущей папке.

Когда команда выполнится успешно, шкала прогресса дойдёт до 100%, и в текущем каталоге появится curl-8.21.0.tar.gz. Перед использованием лучше убедиться, что файл на месте:

ls -lh curl-8.21.0.tar.gz

Шаг 2: Скачайте и переименуйте файл

Используйте -o, когда вам нужно конкретное локальное имя файла, а не то, на которое заканчивается URL:

curl -L -o curl-latest.tar.gz -S https://github.com/curl/curl/releases/download/curl-8_21_0/curl-8.21.0.tar.gz

Флаг -S здесь снова включает показ ошибок, если где-то выше по скрипту вы также используете -s. Комбинация -L -o <name> -S — это, по сути, моя стандартная команда для одиночной загрузки.

Шаг 3: Возобновите прерванную загрузку

Если большая загрузка оборвалась посередине — плохой Wi‑Fi, сбой VPN, что угодно — не начинайте сначала. Запустите:

curl -C - -LO https://example.com/large-file.iso

Но есть нюанс: это работает только если сервер поддерживает запросы диапазона байтов. Заголовок Accept-Ranges: bytes — хороший признак, но его отсутствие ещё не доказывает, что диапазоны не поддерживаются. Надёжнее всего проверить ответ сервера на реальный range-запрос: для возобновляемой загрузки обычно возвращается 206 Partial Content с корректным Content-Range. Запустите команду возобновления и посмотрите статус через -v или -D -; если сервер игнорирует диапазон или отклоняет смещение, лучше начать загрузку заново, чем полагаться на частичный файл.

A resilient cURL download resumes after interruption and finishes with checksum verification

Шаг 4: Скачивайте с индикатором прогресса — или без лишнего шума

Для более аккуратного вывода в интерактивном терминале используйте: curl -# -LO <url>. Для скриптов и cron-задач, где нужны только ошибки, а не лишний шум: curl -sS -LO <url>. Я почти везде использую тихий вариант, кроме случаев, когда отлаживаю вручную.

Шаг 5: Ограничьте скорость загрузки

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

curl --limit-rate 1M -LO https://example.com/big-dataset.zip

Единицы измерения — K, M и G для килобайт, мегабайт и гигабайт в секунду соответственно.

Шаг 6: Сохраняйте заголовки ответа вместе с файлом

Иногда мне нужно точно знать, что вернул сервер — тип контента, заголовки кэша и всё такое — без лишнего мусора в терминале:

curl -L -D headers.txt -o file.zip https://example.com/file.zip

В этом случае заголовки ответа попадают в headers.txt, а сам файл — в file.zip. Это удобно для поиска несоответствий в Content-Type или проверки, действительно ли CDN кэширует то, что вы ожидаете.

Советы и частые ошибки

  • Совет: Всегда по умолчанию используйте -L. Я правда не вижу ни одного минуса в этом флаге, а вот часы времени из-за него уже терял.
  • Совет: В скриптах сочетайте команду загрузки с --fail, чтобы ответ не из диапазона 2xx реально завершал скрипт ошибкой, а не молча сохранялся как «файл».
  • Ошибка: Не сочетайте -C - с --remove-on-errorcurl считает эти флаги несовместимыми, потому что для возобновления нужен частично загруженный файл.
  • Ошибка: -O может перезаписывать файлы без предупреждения. Если вы массово скачиваете файлы в общую папку, используйте --output-dir, чтобы всё было в одном месте и без сюрпризов.

Как скачивать несколько файлов и делать пакетные загрузки с cURL

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

Подход 1: Несколько URL в одной команде cURL

Самый простой вариант — просто перечислить URL:

curl -LO https://example.com/a.zip -LO https://example.com/b.zip -LO https://example.com/c.zip

Это работает, но последовательно — curl полностью завершает загрузку одного файла, прежде чем начать следующий. Для трёх файлов нормально, для трёхсот — мучение.

Подход 2: Параллельные загрузки с --parallel (curl 7.66+)

Начиная с curl 7.66, можно добавить --parallel (или -Z), чтобы загружать несколько URL одновременно:

curl --parallel --parallel-max 5 --remote-name-all \
  https://example.com/a.zip https://example.com/b.zip https://example.com/c.zip

Полезно знать: значение --parallel-max по умолчанию — 50, а это куда больше одновременных соединений, чем порадуется большинство серверов и даже ваша собственная сеть. Я предпочитаю указывать --parallel-max явно и консервативно — обычно 4–8 — вместо того чтобы доверять дефолту.

Подход 3: xargs и Bash-циклы для параллелизма из списка URL

Если у меня есть большой список URL в текстовом файле, я обычно беру xargs:

cat urls.txt | xargs -n1 -P 8 curl -O -L

Или, если нужен более точный контроль над каждым заданием, — bash-цикл с запуском в фоне:

while read -r url; do
  curl -O -L "$url" &
done < urls.txt
wait

Команда wait в конце важна — без неё скрипт завершится раньше, чем закончатся фоновые загрузки.

Когда вместо cURL стоит использовать wget или aria2

Скажу прямо: cURL подходит не всегда. Если вам нужно зеркалировать целое дерево каталогов сайта, wget -r рекурсивно обходит страницы «из коробки» — cURL для этого просто не предназначен. Если же вам нужны многосегментные загрузки из нескольких источников ради максимальной скорости одного очень большого файла, aria2c действительно быстрее.

ИнструментЛучше всего подходит для
cURLТочность, скрипты, загрузка одного файла или небольших пакетов, работа с API
wgetРекурсивная загрузка и зеркалирование сайтов, простое массовое скачивание статических файлов
aria2Многосегментные и многoисточниковые загрузки, максимум скорости на больших файлах

Сильная сторона cURL всегда была в точности и композиции — пайпы, скрипты, гибкость протоколов — а не в грубом краулинге.

Как скачивать защищённые файлы с cURL: варианты аутентификации

Большинство туториалов по cURL останавливаются на -u user:pass и считают тему закрытой. Это пережиток более старого интернета. В 2026 году файлы, которые я реально скачиваю, приходят из REST API, панелей сессий и CI-систем — и у каждого из этих источников свой способ авторизации.

Basic Auth

curl -u username:password -O https://legacy-server.example.com/file.zip

Подходит для старых FTP-серверов или простых HTTP-эндпоинтов. Только помните, что пароль попадёт в историю shell и список процессов, если не быть осторожным — для чего-то чувствительного я бы это не использовал.

Авторизация через Bearer / OAuth токен

Это как раз тот случай, который в большинстве гайдов недооценён, хотя я использую его чаще всего:

curl -H "Authorization: Bearer $GITHUB_TOKEN" \
  -LO https://api.github.com/repos/curl/curl/releases/assets/12345

Это реальный шаблон для скачивания приватного asset из релиза GitHub — подставьте свой токен и ID ассета. REST API и ресурсы, защищённые OAuth2, сейчас в основном говорят именно на этом языке.

Авторизация через cookie-сессию

Для веб-приложений, где вход создаёт сессию, сохраните cookie jar при логине и используйте его при скачивании:

curl -c cookies.txt -d "user=me&pass=secret" https://example.com/login
curl -b cookies.txt -O https://example.com/protected/file.zip

Файл .netrc для скриптов и CI-среды

Это мой предпочтительный способ для всего, что работает без присмотра. Создайте файл ~/.netrc (или _netrc в Windows):

machine example.com
login myusername
password mypassword

Ограничьте доступ через chmod 600 ~/.netrc, а затем обращайтесь к нему так:

curl --netrc -LO https://example.com/protected-file.zip

Плюс в том, что учётные данные не попадают ни в историю shell, ни в исходники скрипта — это особенно важно в CI/CD, где скрипты часто логируются целиком.

Способ авторизацииФлаг/опцияЛучше всего для
Basic auth-u user:passУстаревший FTP, простой HTTP
Bearer token-H "Authorization: Bearer <token>"REST API, OAuth2
Cookie auth-b cookies.txt (+ -c для сохранения)Веб-приложения на сессиях
Файл .netrc--netrc или --netrc-fileCI/CD, скриптовая среда

Hand-drawn progress blocks, retry arrow, and completed folder

Устранение типичных сбоев при скачивании через cURL

Это тот раздел, который мне самому очень хотелось бы иметь под рукой в начале пути, потому что почти никто его нормально не раскрывает. Поиск в духе «почему cURL не скачивает файл» — очень частый и очень раздражающий, а исправления обычно сводятся к одной строке, если знать причину.

СимптомВероятная причинаРешение
curl: (60) SSL certificate problemСамоподписанный или просроченный сертификат--cacert <file> или -k (только для dev)
403 Forbidden / пустой файлСервер блокирует стандартный User-Agent curl-A "Mozilla/5.0..." или -H "User-Agent: ..."
Загрузка начинается заново с 0 при -C -Сервер не поддерживает RangeПроверьте через curl -I <url> наличие Accept-Ranges: bytes
Сохранён файл размером 0 байтНе был выполнен редиректДобавьте флаг -L
curl: (28) Operation timed outМедленный сервер или проблемы сети--connect-timeout 10 --max-time 300 + --retry 3
Вместо файла сохранилась HTML-страницаСтраница требует рендеринга JavaScriptcurl не умеет выполнять JS — см. раздел ниже

Ошибки SSL-сертификата: что они означают и как их исправить

Ошибка 60 означает, что curl не смог проверить SSL-сертификат сервера — обычно потому, что он самоподписанный, просроченный или выдан центром сертификации, которому curl не доверяет. Если сервером управляете вы, укажите curl нужный CA bundle через --cacert /path/to/ca.pem. Флаг -k (--insecure) полностью отключает проверку, что допустимо в локальной dev-среде, но очень плохая идея для всего, что связано с продакшеном или реальными пользовательскими данными.

403 Forbidden и пустые загрузки

Удивительно много серверов блокируют запросы, которые представляются как curl/8.21.0 — стандартный User-Agent curl — считая их ботами или скрейперами. Обычно решение простое: притвориться браузером:

curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" -LO https://example.com/file.zip

Чтобы перед полной загрузкой проверить, что реально возвращает сервер, я использую: curl -o /dev/null -s -w "%{http_code}\n" <url>.

Таймауты, повторные попытки и нестабильные соединения

Это та команда, которую я бы набил себе на руку, если бы был смелее в вопросе татуировок.

Моя основная команда для загрузки — та, которую я реально использую в production-скриптах, — собирает все флаги надёжности вместе:

curl -L -C - --retry 5 --retry-delay 3 --connect-timeout 10 --max-time 600 --fail -O <url>

То есть: следование редиректам, возобновление, пять повторов с задержкой 3 секунды, таймаут подключения 10 секунд, общий лимит 10 минут и жёсткий фейл при плохом HTTP-статусе — по сути, всё, чему я научился на собственных ошибках.

cURL в реальной автоматизации: CI/CD, пайпы и безопасность скриптов

Передача вывода cURL в другие инструменты

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

curl -sL https://example.com/archive.tar.gz | tar xz
curl -s https://api.example.com/data | jq '.results'

Скачать и сразу распаковать или скачать и сразу распарсить — всё в одной строке. Этот шаблон я постоянно использую для разовых выгрузок данных.

Использование cURL в GitHub Actions и CI/CD

Минимальный шаг GitHub Actions, который скачивает бинарник с логикой повторов и громко падает при ошибке:

- name: Download binary
  run: |
    curl -L --fail --retry 3 --retry-delay 5 \
      -o app-binary "https://example.com/releases/app-binary"

Храните токены как секреты CI и обращайтесь к ним через переменные окружения — никогда не зашивайте их прямо в скрипт. И обязательно используйте --fail (или --fail-with-body, если вам нужен body ошибки для отладки), чтобы сломанная загрузка действительно ломала сборку, а не успешно завершалась мусором.

Вопрос безопасности curl | sh

Этот вопрос всплывает почти на каждом форуме для разработчиков — и не зря: если вы напрямую передаёте вывод curl в sh, вы исполняете удалённый код, который не посмотрели сами, полностью полагаясь на то, что сервер не скомпрометирован и соединение не подменено. В этом и риск — никакой паранойи, просто обычная цепочка поставки.

Безопаснее сначала скачать файл, посмотреть скрипт, проверить checksum или GPG-подпись, если они предоставлены, и только потом запускать:

curl -sL https://example.com/install.sh -o install.sh
cat install.sh   # сначала реально прочитайте
sha256sum install.sh   # сравните с опубликованным checksum, если он есть
bash install.sh

Известные установщики вроде rustup и Homebrew всё ещё используют шаблон curl | sh, и для них это в целом приемлемо, потому что у этих проектов устоявшаяся команда и понятный канал распространения. Но лично я всё равно предпочту потратить лишние десять секунд на проверку скрипта, чем потом выяснять, что доверял ему зря.

Когда cURL уже недостаточно: страницы с JS-рендерингом, антиботы и структурированные данные

Вот режим отказа, который многих ставит в тупик, и чаще всего это не их вина: вы запускаете curl -O против страницы, которая выглядит обычной, а вместо ожидаемого контента получаете пустую HTML-оболочку, страницу-челлендж от Cloudflare или просто мусор. curl сделал ровно то, для чего создан — забрал сырой HTTP-ответ. Он просто не умеет выполнять JavaScript, проходить CAPTCHA или обходить антибот-системы по отпечатку браузера. Это не баги curl — это вообще не его зона ответственности.

Почему cURL ломается на современных веб-страницах

Современные одностраничные приложения часто отдают почти пустой HTML-каркас, а настоящий контент подгружается и рендерится на клиенте через JavaScript уже после загрузки страницы — а это curl никогда не исполняет. Более того, такие системы, как Cloudflare и Akamai, могут специально отдавать challenge-страницы всему, что не похоже на реальный браузер, а повторяющиеся запросы cURL с одного IP быстро могут попасть под rate limiting или быть помечены как бот-трафик.

Следующий шаг: AI scraping API для разработчиков

Я бы сказал, что cURL — правильный инструмент примерно для 80% всех загрузок файлов и данных: статические ресурсы, ответы API, всё, что отдаётся как обычный HTTP-ресурс. А вот оставшиеся 20% — страницы с тяжёлым JavaScript или защитой от ботов — это как раз тот случай, когда разработчики часами мучаются с заголовками и User-Agent, а потом всё равно переходят на другой уровень.

Именно эту нишу моя команда и закрыла с Thunderbit, вместе с расширением Chrome, по которому нас чаще всего и знают. На стороне разработчика Open API Thunderbit даёт вам POST /distill, который возвращает чистый Markdown, готовый для LLM, прямо из URL — при этом рендеринг страницы берёт на себя сам сервис — а также POST /extract, который возвращает структурированный JSON, совпадающий со схемой, когда вам нужны не просто читаемые тексты, а поля и значения. Есть и MCP-сервер, так что агенты в Claude или Cursor могут вызывать thunderbit_distill и thunderbit_extract прямо в процессе задачи, а также CLI (npx @thunderbit/thunderbit-cli distill <url>), который по ощущениям очень похож на curl в терминале. Например, JSON-вывод можно передать в jq: thunderbit distill <url> --format json | jq -r '.data.markdown'; а вывод --format markdown — отправить в текстовый инструмент или сохранить в файл.

Если сравнивать напрямую, разница очень заметна. Запрос cURL к странице продукта, рендерящейся через JS, может вернуть почти пустой <div id="root"></div>. А эквивалентная команда thunderbit distill возвращает уже отрендеренный контент страницы в виде чистого Markdown. Distill стоит 1 кредит за URL, а Extract — 20 кредитов за URL. Актуальные лимиты по эндпоинтам различаются: Batch Distill поддерживает до 100 URL за задачу, а Batch Extract принимает до 50 URL с одной общей схемой. Перед настройкой production-очереди обязательно проверьте актуальную документацию API.

Если вы только начинаете разбираться в теме, наш материал о том, что такое веб-скрейпинг на практике — неплохая отправная точка, а гайд по скрейпингу без кода объясняет ту же проблему с другой стороны — для тех, кто в вашей команде не собирается открывать терминал. Для более широкого сравнения инструментов в этой области мы также подготовили обзор лучших AI web scrapers.

Краткая шпаргалка: cURL для скачивания файлов

ЗадачаКоманда
Базовая загрузкаcurl -LO <url>
Свой файл-имяcurl -L -o myfile.zip <url>
Возобновить загрузкуcurl -C - -LO <url>
Тихо, но с ошибкамиcurl -sSL -O <url>
Параллельные загрузкиcurl --parallel --parallel-max 5 -O <url1> -O <url2>
Аутентификация по Bearer-токенуcurl -H "Authorization: Bearer <token>" -LO <url>
Надёжная загрузка для скриптаcurl -LO --retry 5 --retry-delay 3 --max-time 600 --fail <url>
Передать в инструмент извлеченияcurl -sL <url> | tar xz

Заключение и главные выводы

Скачивание файла через curl начинается очень просто — curl -O, и на этом вроде бы всё — но настоящая ценность скрыта в деталях: когда добавить -L, когда лучше продолжить загрузку, а не начинать заново, какой способ авторизации реально подходит вашему сценарию и что делать, когда вместо нужного файла вы получаете 403 или пустую HTML-оболочку. Я использовал каждый из этих приёмов, обычно сразу после того, как на собственном опыте понял, почему это важно.

curl по-прежнему остаётся моим инструментом по умолчанию для простых загрузок файлов и скриптуемой HTTP-работы — он быстрый, вездесущий и отлично сочетается с остальной shell-цепочкой. Но когда вы упираетесь в страницу с JavaScript-рендерингом или антибот-защиту, проблема уже не в том, чтобы добавить ещё один флаг curl; это знак, что нужен другой уровень, и именно здесь API вроде Thunderbit подхватывает задачу, не заставляя вас выходить из терминала.

Сохраните эту шпаргалку, попробуйте команду с повторными попытками и возобновлением на следующей нестабильной загрузке, а если однажды упёрлись в стену, где curl просто возвращает мусор, вы уже знаете, как выглядит следующий шаг — на странице цен Thunderbit можно посмотреть актуальное количество кредитов, если хотите понять, во что обойдётся такой переход, а на нашем YouTube-канале есть пошаговые видео, если вам удобнее смотреть, чем читать.

Частые вопросы о скачивании файлов с cURL

Как скачать файл через cURL и сохранить его под конкретным именем?

Используйте -o и укажите нужное имя файла: curl -L -o yourname.ext <url>. Добавьте -L, чтобы редиректы не сорвали загрузку.

Как возобновить неудавшуюся загрузку через cURL?

Запустите curl -C - -LO <url>. Это работает только если сервер поддерживает range-запросы — сначала проверьте через curl -I <url> и посмотрите, есть ли в ответе Accept-Ranges: bytes.

Можно ли через cURL скачивать файлы, требующие входа в систему?

Да, четырьмя основными способами: basic auth (-u user:pass), bearer-токен (-H "Authorization: Bearer <token>"), cookie-сессия (-b cookies.txt) или файл .netrc для сценариев и автоматизации. Полная разбивка и случаи использования — в разделе про аутентификацию выше.

В чём разница между cURL и wget для скачивания файлов?

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

Почему cURL скачивает HTML-страницу вместо настоящего файла?

Обычно виноват один из двух сценариев: вы забыли флаг -L, и сервер отправил вас по редиректу в другое место, либо страница требует JavaScript для рендеринга содержимого — а curl просто не умеет выполнять JS. Во втором случае нужен инструмент с поддержкой рендеринга, а не ещё больше флагов curl.

Узнать больше

Ke
Ke
Технический директор в Thunderbit | Senior Data Scientist и эксперт по ML Имея почти десятилетний опыт в машинном обучении и data science, Кэ Шэнь — выпускник Колумбийского университета и бывший Senior Data Scientist в Walmart Labs. Обладая глубокой, признанной коллегами экспертизой в Python, R, Java и статистике, он делится проверенными на практике наблюдениями о том, как переводить сложные AI-алгоритмы из теории в production-grade архитектуру.
Topics
скачивание файлов с cURLавтоматизация из командной строкинадёжная передача файлов
Содержание
Thunderbit · AI-агент для веб-данных

Извлекай данные с любой страницы за 1 клик

Нам доверяют более 250 000 пользователей
доступен бесплатный тариф
От веб-страницы к таблице
Опиши, что тебе нужно, — AI-агент Thunderbit соберет это и экспортирует в Excel, Google Sheets, Airtable или Notion. Старт бесплатный.
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week