Како преузимати фајлове помоћу curl
curl је један од најсвестранијих алата командне линије за преузимање фајлова преко HTTP, HTTPS, FTP и десетина других протокола. Било да треба да сачувате одговор API у фајл или аутоматизујете масовно преузимање у shell скрипти, curl има опцију за то. Овај водич покрива све опције везане за преузимање — од основног чувања фајлова помоћу -o и -O до наставка прекинутих трансфера са -C -, ограничавања пропусног опсега помоћу --limit-rate и приказивања трака напретка. Свака опција укључује јасно објашњење, уобичајене обрасце коришћења и пример спреман за копирање.
Брзи преглед опција за преузимање
Записати излаз у фајл са наведеним именом уместо stdout
Записати излаз у фајл са именом удаљеног фајла
Аутоматски пратити HTTP 3xx преусмеравања
Наставити/обновити претходни трансфер фајла
Ограничити брзину трансфера на задату вредност
Одбити преузимање фајлова већих од наведене величине
Користити Content-Disposition заглавље за именовање фајла
Приказати напредак трансфера као једноставну траку напретка
Навести корисничко_име:лозинку за аутентификацију на серверу
Поновити трансфер при пролазним грешкама (број покушаја)
Сачекати овај број секунди између покушаја
Отпремити локални фајл на URL (подразумевано PUT)
Креирати локалне директоријуме по потреби при чувању излаза
Потиснути индикатор напретка и поруке о грешкама
Сачувати излазне фајлове у наведени директоријум (curl 7.73+)
curl -o: Чување са одређеним именом фајла
- Шта ради
- Опција
-o(или--output) говори curl-у да сачува тело одговора у фајл који наведете. Без ње, curl исписује одговор на stdout (ваш терминал). Можете користити било које име фајла и путању — curl ће креирати фајл или преписати постојећи. - Уобичајено коришћење
- Користите
-oкада треба да контролишете тачно име фајла или да сачувате у одређени директоријум. Ради са било којим протоколом — HTTP, HTTPS, FTP, SFTP и другим. Комбинујте са-Lза праћење преусмеравања и-sза тихи режим у скриптама.
$ curl -o report.pdf https://example.com/files/report.pdfcurl -O: Чување са именом фајла са сервера
- Шта ради
- Опција
-O(или--remote-name) чува преузети фајл користећи име извучено из URL-а. На пример, ако се URL завршава са/data.csv, curl креира фајл под именомdata.csvу тренутном директоријуму. - Уобичајено коришћење
- Користите
-Oкада је име удаљеног фајла смислено и не треба да га преименујете. Можете проследити више-Oопција за преузимање неколико фајлова једном командом. Напомена: ако URL не садржи име фајла (нпр. завршава се са/), curl ће пропасти — користите-oуместо тога.
$ curl -O https://example.com/files/data.csvcurl -L: Праћење преусмеравања
- Шта ради
- Опција
-L(или--location) чини да curl аутоматски прати HTTP преусмеравања — 301 (Moved Permanently), 302 (Found), 307 и 308. Без-L, curl враћа сам одговор преусмеравања уместо стварног садржаја. - Уобичајено коришћење
- Већина URL-ова за преузимање преусмерава бар једном (нпр. са HTTP на HTTPS или са кратког URL-а на стварни фајл). Увек комбинујте
-Lса-oили-Oпри преузимању фајлова. Подразумевано curl прати до 50 преусмеравања; промените ово помоћу--max-redirs.
$ curl -L -o latest.tar.gz https://github.com/user/repo/releases/latest/download/app.tar.gzcurl -C -: Наставак прекинутих преузимања
- Шта ради
- Опција
-C -(или--continue-at -) говори curl-у да аутоматски детектује величину постојећег делимичног фајла и настави преузимање од места где је стало. Сервер мора подржавати HTTP заглављеRangeда би ово функционисало. - Уобичајено коришћење
- Ако је велико преузимање прекинуто проблемом мреже или истеком времена, једноставно поново покрените исту команду са додатим
-C -. curl ће послати заглављеRange: bytes=OFFSET-и преузети само преостале податке. Ово је кључно за велике фајлове преко нестабилних конекција.
$ curl -C - -o largefile.zip https://cdn.example.com/largefile.zipcurl --limit-rate: Ограничавање брзине преузимања
- Шта ради
- Опција
--limit-rateограничава брзину преузимања (и отпремања) на задату вредност. Прихвата суфиксе:kилиKза килобајте/с,mилиMза мегабајте/с,gилиGза гигабајте/с. - Уобичајено коришћење
- Користите
--limit-rateда избегнете засићење пропусног опсега при преузимању великих фајлова, посебно на дељеним конекцијама. Такође је корисно за тестирање понашања апликације при спорим одговорима.
$ curl --limit-rate 1M -o bigfile.iso https://mirror.example.com/bigfile.isocurl --max-filesize: Прекид ако је фајл превелик
- Шта ради
- Опција
--max-filesizeговори curl-у да прекине трансфер ако очекивана величина фајла (из заглављаContent-Length) прелази наведени лимит. Величина може користити суфиксе попутk,M,G. - Уобичајено коришћење
- Користите у скриптама да спречите неочекивано велика преузимања која троше простор на диску. Имајте на уму да не шаљу сви сервери
Content-Length— у том случају curl не може применити овај лимит и преузимање се наставља нормално.
$ curl --max-filesize 100M -o update.bin https://example.com/update.bincurl -J: Коришћење имена фајла предложеног од сервера
- Шта ради
- Опција
-J(или--remote-header-name) говори curl-у да користи име фајла наведено у заглављуContent-Dispositionсервера уместо извођења из URL-а. Ово је уобичајено за API-је за преузимање који враћају фајлове са смисленим именима. - Уобичајено коришћење
- Увек комбинујте
-Jса-O. Ово је корисно када је URL API endpoint (попут/export?format=csv) али сервер враћа одговарајуће име фајла у заглављима. Безбедносна напомена: сервер контролише име фајла, па користите само са поузданим серверима.
$ curl -L -O -J https://example.com/api/export?format=csvcurl -#: Приказ траке напретка
- Шта ради
- Опција
-#(или--progress-bar) замењује подразумевани детаљни индикатор напретка једноставном траком###. Лакше се чита за интерактивно коришћење. - Уобичајено коришћење
- Користите
-#при интерактивном преузимању када желите чист индикатор напретка. За скрипте, преферирајте-s(тихи) или подразумевани индикатор. Подразумевани излаз curl-а већ приказује брзину, проценат, преостало време и укупну величину.
$ curl -# -o archive.tar.gz https://example.com/archive.tar.gzДодатне опције преузимања
Навести корисничко_име:лозинку за аутентификацију на серверу
Поновити трансфер при пролазним грешкама (број покушаја)
Сачекати овај број секунди између покушаја
Отпремити локални фајл на URL (подразумевано PUT)
Креирати локалне директоријуме по потреби при чувању излаза
Потиснути индикатор напретка и поруке о грешкама
Сачувати излазне фајлове у наведени директоријум (curl 7.73+)
Практични сценарији преузимања
Ови примери комбинују више опција за решавање уобичајених задатака преузимања са којима ћете се сусрести у свакодневном развоју и скриптовању.
Преузимање више фајлова одједном
Користите више -O опција за преузимање неколико фајлова једном командом. curl их обрађује секвенцијално. За паралелна преузимања, користите xargs или GNU parallel.
$ curl -O https://example.com/file1.txt -O https://example.com/file2.txt -O https://example.com/file3.txtПреузимање са FTP сервера
curl нативно подржава FTP, FTPS и SFTP. Додајте -u user:password за аутентификовани приступ. Користите -O за задржавање имена удаљеног фајла.
$ curl -u user:pass -o backup.sql ftp://ftp.example.com/db/backup.sqlПреузимање са аутентификацијом
Користите -u user:pass за Basic Auth или -H за прослеђивање Bearer токена или API кључа. Комбинујте са -L и -o за комплетно преузимање.
$ curl -H "Authorization: Bearer eyJhbGciOi..." -L -o data.json https://api.example.com/exportПоуздано преузимање са наставком и поновним покушајима
Комбинујте -C - (наставак), --retry (аутоматски поновни покушај при неуспеху) и -L (праћење преусмеравања) за робусна преузимања која преживљавају прекиде мреже.
$ curl -C - --retry 5 --retry-delay 10 -L -o largefile.zip https://cdn.example.com/largefile.zipЧесто постављана питања о преузимању помоћу curl
Која је разлика између curl -o и curl -O?
-o filename чува преузимање са тачним именом фајла које наведете. -O извлачи име фајла из URL-а и користи га. Користите -o када желите прилагођено име или путању; користите -O када је име удаљеног фајла одговарајуће.
Зашто curl преузима празан или HTML фајл уместо стварног фајла?
URL вероватно враћа HTTP преусмеравање (301 или 302). Подразумевано, curl чува сам одговор преусмеравања — не крајњи садржај. Додајте -L за аутоматско праћење преусмеравања: curl -L -o file URL.
Како наставити делимично преузети фајл помоћу curl?
Користите curl -C - -o filename URL. Опција -C - детектује величину постојећег фајла и шаље заглавље Range да затражи само преостале бајтове. Сервер мора подржавати захтеве опсега да би ово функционисало.
Како ограничити брзину преузимања у curl?
Користите --limit-rate са вредношћу и суфиксом: curl --limit-rate 500k -o file URL ограничава брзину на 500 KB/s. Суфикси: k (KB/s), M (MB/s), G (GB/s).
Може ли curl преузети више фајлова одједном?
Да. Користите више -O опција: curl -O URL1 -O URL2 -O URL3. curl их преузима секвенцијално. За паралелна преузимања, проследите листу URL-ова у xargs -P 4 -I {} curl -O {}.
Како преузети фајл који захтева аутентификацију?
За HTTP Basic Auth: curl -u user:pass -o file URL. За Bearer токене: curl -H "Authorization: Bearer TOKEN" -o file URL. За API кључеве у заглављима: curl -H "X-API-Key: KEY" -o file URL.
Како преузети фајлове са FTP сервера помоћу curl?
Користите curl -u user:pass -o localfile ftp://host/path/file. curl нативно подржава FTP, FTPS (FTP преко TLS) и SFTP (SSH FTP). За анонимни FTP, изоставите -u.
Како поуздано преузети велике фајлове помоћу curl?
Комбинујте -C - (наставак при неуспеху), --retry 5 (аутоматски поновни покушај), --retry-delay 10 и -L (праћење преусмеравања): curl -C - --retry 5 --retry-delay 10 -L -o file URL. Ово аутоматски решава проблеме мреже.
Како приказати траку напретка при преузимању помоћу curl?
Користите curl -# -o file URL за једноставну траку напретка. Подразумевани излаз curl-а већ приказује брзину трансфера, проценат и процењено време. За скрипте, користите -s за потискивање целог излаза.
Могу ли навести директоријум за преузимање у curl?
Са curl 7.73+, користите --output-dir /path/to/dir у комбинацији са -O. За старије верзије, наведите пуну путању помоћу -o /path/to/dir/filename. Додајте --create-dirs ако директоријум још не постоји.
Да ли да користим curl или wget за преузимање фајлова?
Оба су одлична. wget је једноставнији за рекурзивно пресликавање веб сајтова и има уграђену логику поновних покушаја. curl подржава преко 25 протокола (не само HTTP/FTP), бољи је за API позиве и скриптовање, подржава више метода аутентификације и доступан је на практично сваком оперативном систему.
Како користити curl у bash скрипти за преузимање фајлова?
Користите curl -fsSL -o file URL: -f тихо пропада при HTTP грешкама (без сачуване странице грешке), -s тихи, -S приказује грешке чак и у тихом режиму, -L прати преусмеравања. Проверите излазни код: if ! curl -fsSL -o file URL; then echo "Download failed"; exit 1; fi.