curl арқылы файлдарды қалай жүктеуге болады

curl — HTTP, HTTPS, FTP және ондаған басқа хаттамалар арқылы файлдарды жүктеуге арналған ең әмбебап командалық жол құралдарының бірі. Бір API жауабын файлға сақтау немесе shell сценарийінде пакеттік жүктеулерді автоматтандыру қажет болса да, curl-да бұл үшін жалауша бар. Бұл нұсқаулық жүктеуге қатысты барлық опцияларды қамтиды — -o және -O арқылы негізгі файлды сақтаудан, -C - арқылы үзілген тасымалдауларды жалғастыруға, --limit-rate арқылы өткізу қабілетін шектеуге және прогресс жолағын көрсетуге дейін. Әр жалауша нақты түсіндірмені, жиі қолданылатын үлгілерді және көшіруге дайын мысалды қамтиды.

Жүктеу жалаушаларының жылдам анықтамалығы

-o

stdout орнына көрсетілген файлға шығысты жазу

-O

Қашықтағы файл атауы сияқты файлға шығысты жазу

-L

HTTP 3xx бағыттауларын автоматты түрде орындау

-C -

Алдыңғы файл тасымалдауын жалғастыру/қайта бастау

--limit-rate

Тасымалдау жылдамдығын берілген шамаға дейін шектеу

--max-filesize

Көрсетілген өлшемнен үлкен файлдарды жүктеуден бас тарту

-J

Файлды атау үшін Content-Disposition тақырыбын қолдану

-#

Тасымалдау прогресін қарапайым прогресс жолағы ретінде көрсету

-u

Сервер аутентификациясы үшін username:password беру

--retry

Уақытша қателерде тасымалдауды қайталау (рет саны)

--retry-delay

Қайталаулар арасында осынша секунд күту

-T

Жергілікті файлды URL-ге жүктеп салу (әдепкі бойынша PUT)

--create-dirs

Шығысты сақтау кезінде қажетті жергілікті каталогтарды жасау

-s

Прогресс есептегіші мен қате хабарламаларын басу

--output-dir

Шығыс файл(дар)ды көрсетілген каталогқа сақтау (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.pdf

curl -O: қашықтағы файл атауымен сақтау

Не істейді
-O (немесе --remote-name) жалаушасы жүктелген файлды URL-ден алынған файл атауын қолданып сақтайды. Мысалы, егер URL /data.csv-мен аяқталса, curl ағымдағы каталогта data.csv деген файл жасайды.
Жиі қолданылуы
-O қашықтағы файл атауы мағыналы болып, оны қайта атау қажет болмағанда қолданыңыз. Бір бұйрықта бірнеше файл жүктеу үшін бірнеше -O жалаушасын беруге болады. Ескерту: URL файл атауын қамтымаса (мысалы, /-мен аяқталса), curl сәтсіз болады — оның орнына -o қолданыңыз.
$ curl -O https://example.com/files/data.csv

curl -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.gz

curl -C -: үзілген жүктеуді жалғастыру

Не істейді
-C - (немесе --continue-at -) жалаушасы curl-ға бар ішінара файлдың өлшемін автоматты түрде анықтап, тоқтаған жерінен жүктеуді жалғастыруды нұсқайды. Бұл жұмыс істеу үшін сервер HTTP Range тақырыбын қолдауы керек.
Жиі қолданылуы
Егер үлкен жүктеу желі мәселесі немесе таймаут арқылы үзілсе, жай ғана -C - қосылған сол бұйрықты қайта іске қосыңыз. curl Range: bytes=OFFSET- тақырыбын жібереді және тек қалған деректерді жүктейді. Сенімсіз қосылымдардағы үлкен файлдар үшін маңызды.
$ curl -C - -o largefile.zip https://cdn.example.com/largefile.zip

curl --limit-rate: жүктеу жылдамдығын шектеу

Не істейді
--limit-rate жалаушасы жүктеу (және жүктеп салу) жылдамдығын көрсетілген шамаға дейін шектейді. Жұрнақтарды қабылдайды: k немесе K килобайт/с, m немесе M мегабайт/с, g немесе G гигабайт/с.
Жиі қолданылуы
Үлкен файлдарды жүктегенде, әсіресе ортақ қосылымдарда, өткізу қабілетін толтырмау үшін --limit-rate қолданыңыз. Қолданбаңыздың баяу жауаптарды қалай өңдейтінін тексеру үшін де пайдалы.
$ curl --limit-rate 1M -o bigfile.iso https://mirror.example.com/bigfile.iso

curl --max-filesize: файл тым үлкен болса тоқтату

Не істейді
--max-filesize жалаушасы curl-ға күтілетін файл өлшемі (Content-Length тақырыбынан) көрсетілген шектен асса тасымалдауды тоқтатуды нұсқайды. Өлшем k, M, G сияқты жұрнақтарды қолдана алады.
Жиі қолданылуы
Сценарийлерде күтпеген үлкен жүктеулердің диск кеңістігін тұтынуын болдырмау үшін қолданыңыз. Барлық серверлер Content-Length жібере бермейді — бұл жағдайда curl бұл шектеуді қолдана алмайды және жүктеу қалыпты жалғасады.
$ curl --max-filesize 100M -o update.bin https://example.com/update.bin

curl -J: сервер ұсынған файл атауын қолдану

Не істейді
-J (немесе --remote-header-name) жалаушасы curl-ға URL-ден шығарудың орнына сервердің Content-Disposition тақырыбында көрсетілген файл атауын қолдануды нұсқайды. Бұл мағыналы атаулармен файлдарды қайтаратын жүктеу API-лері үшін жиі кездеседі.
Жиі қолданылуы
-J-ні әрқашан -O-мен біріктіріңіз. URL API нүктесі болғанда (/export?format=csv сияқты), бірақ сервер тақырыптарда дұрыс файл атауын қайтарғанда пайдалы. Қауіпсіздік ескертуі: файл атауын сервер басқарады, сондықтан тек сенімді серверлермен қолданыңыз.
$ curl -L -O -J https://example.com/api/export?format=csv

curl -#: прогресс жолағын көрсету

Не істейді
-# (немесе --progress-bar) жалаушасы әдепкі толық прогресс есептегішін қарапайым ### прогресс жолағымен ауыстырады. Бұл интерактивті қолдану үшін оқуға оңай.
Жиі қолданылуы
Интерактивті жүктеу кезінде таза прогресс көрсеткіші қажет болғанда -# қолданыңыз. Сценарийлер үшін -s (үнсіз) немесе әдепкі прогресс есептегішін таңдаңыз. curl-дың әдепкі шығысы жылдамдықты, пайызды, қалған уақытты және жалпы өлшемді көрсетеді.
$ curl -# -o archive.tar.gz https://example.com/archive.tar.gz

Қосымша жүктеу опциялары

-u

Сервер аутентификациясы үшін username:password беру

--retry

Уақытша қателерде тасымалдауды қайталау (рет саны)

--retry-delay

Қайталаулар арасында осынша секунд күту

-T

Жергілікті файлды URL-ге жүктеп салу (әдепкі бойынша PUT)

--create-dirs

Шығысты сақтау кезінде қажетті жергілікті каталогтарды жасау

-s

Прогресс есептегіші мен қате хабарламаларын басу

--output-dir

Шығыс файл(дар)ды көрсетілген каталогқа сақтау (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

Аутентификациямен жүктеу

Basic Auth үшін -u user:pass қолданыңыз, немесе Bearer токені немесе API кілтін беру үшін -H қолданыңыз. Толық жүктеу үшін -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 тақырыбын жібереді. Бұл жұмыс істеу үшін сервер range сұрауларын қолдауы керек.

curl-да жүктеу жылдамдығын қалай шектеуге болады?

--limit-rate мәнмен және жұрнақпен қолданыңыз: curl --limit-rate 500k -o file URL жылдамдықты 500 КБ/с-ға дейін шектейді. Жұрнақтар: k (КБ/с), M (МБ/с), G (ГБ/с).

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.

curl-мен FTP серверінен файлдарды қалай жүктеуге болады?

curl -u user:pass -o localfile ftp://host/path/file қолданыңыз. curl FTP, FTPS (FTP over 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 шақырулары мен сценарийлер үшін жақсырақ, көбірек аутентификация әдістерін қолдайды және іс жүзінде барлық операциялық жүйеде қол жетімді.

Файлдарды жүктеу үшін bash сценарийінде curl-ды қалай қолдануға болады?

curl -fsSL -o file URL қолданыңыз: -f HTTP қателерінде үнсіз сәтсіз болады (қате беті сақталмайды), -s үнсіз, -S үнсіз режимде де қателерді көрсету, -L бағыттауларды орындау. Шығу кодын тексеріңіз: if ! curl -fsSL -o file URL; then echo "Download failed"; exit 1; fi.