Jak pobierać pliki za pomocą curl
curl jest jednym z najbardziej wszechstronnych narzędzi wiersza poleceń do pobierania plików przez HTTP, HTTPS, FTP i dziesiątki innych protokołów. Niezależnie od tego, czy musisz zapisać pojedynczą odpowiedź API do pliku, czy zautomatyzować pobieranie wsadowe w skrypcie powłoki, curl ma do tego odpowiednią flagę. Ten przewodnik obejmuje każdą opcję związaną z pobieraniem — od podstawowego zapisywania plików za pomocą -o i -O, przez wznawianie przerwanych transferów za pomocą -C -, ograniczanie przepustowości za pomocą --limit-rate, aż po wyświetlanie pasków postępu. Każda flaga zawiera jasne wyjaśnienie, typowe wzorce użycia i gotowy do skopiowania przykład.
Szybki przegląd flag pobierania
Zapisz wynik do nazwanego pliku zamiast na stdout
Zapisz wynik do pliku o nazwie takiej jak plik zdalny
Automatycznie podążaj za przekierowaniami HTTP 3xx
Kontynuuj/wznów poprzedni transfer pliku
Ogranicz prędkość transferu do podanej wartości
Odmów pobierania plików większych niż określony rozmiar
Użyj nagłówka Content-Disposition do nazwania pliku
Wyświetl postęp transferu jako prosty pasek postępu
Podaj nazwę użytkownika:hasło do uwierzytelniania na serwerze
Ponów próbę transferu przy przejściowych błędach (liczba razy)
Poczekaj tyle sekund między kolejnymi próbami
Wyślij lokalny plik pod URL (domyślnie PUT)
Twórz lokalne katalogi w razie potrzeby przy zapisywaniu wyniku
Ukryj miernik postępu i komunikaty o błędach
Zapisz plik(i) wyjściowe w określonym katalogu (curl 7.73+)
curl -o: Zapisz pod określoną nazwą pliku
- Co robi
- Flaga
-o(lub--output) nakazuje curl zapisanie treści odpowiedzi do wskazanego pliku. Bez niej curl wypisuje odpowiedź na stdout (twój terminal). Możesz użyć dowolnej nazwy pliku i ścieżki — curl utworzy plik lub nadpisze istniejący. - Typowe użycie
- Używaj
-o, gdy chcesz kontrolować dokładną nazwę pliku lub zapisywać do określonego katalogu. Działa z każdym protokołem — HTTP, HTTPS, FTP, SFTP i innymi. Połącz z-Ldo obsługi przekierowań i-sdo cichej pracy w skryptach.
$ curl -o report.pdf https://example.com/files/report.pdfcurl -O: Zapisz z nazwą pliku ze zdalnego serwera
- Co robi
- Flaga
-O(lub--remote-name) zapisuje pobrany plik używając nazwy wyodrębnionej z URL. Na przykład, jeśli URL kończy się na/data.csv, curl tworzy plik o nazwiedata.csvw bieżącym katalogu. - Typowe użycie
- Używaj
-O, gdy nazwa pliku na serwerze jest znacząca i nie musisz jej zmieniać. Możesz przekazać wiele flag-O, aby pobrać kilka plików jednym poleceniem. Uwaga: jeśli URL nie zawiera nazwy pliku (np. kończy się na/), curl zakończy się niepowodzeniem — użyj-ozamiast tego.
$ curl -O https://example.com/files/data.csvcurl -L: Podążaj za przekierowaniami
- Co robi
- Flaga
-L(lub--location) powoduje, że curl automatycznie podąża za przekierowaniami HTTP — 301 (Przeniesiono na stałe), 302 (Znaleziono), 307 i 308. Bez-Lcurl zwraca samą odpowiedź przekierowania zamiast właściwej treści. - Typowe użycie
- Większość adresów URL do pobrania przekierowuje przynajmniej raz (np. z HTTP na HTTPS lub z krótkiego URL do właściwego pliku). Zawsze łącz
-Lz-olub-Oprzy pobieraniu plików. Domyślnie curl podąża za maksymalnie 50 przekierowaniami; zmień to za pomocą--max-redirs.
$ curl -L -o latest.tar.gz https://github.com/user/repo/releases/latest/download/app.tar.gzcurl -C -: Wznów przerwane pobieranie
- Co robi
- Flaga
-C -(lub--continue-at -) nakazuje curl automatyczne wykrycie rozmiaru istniejącego częściowego pliku i wznowienie pobierania od miejsca, w którym zostało przerwane. Serwer musi obsługiwać nagłówek HTTPRange. - Typowe użycie
- Jeśli duże pobieranie zostało przerwane przez problem z siecią lub timeout, wystarczy ponownie uruchomić to samo polecenie z dodaną flagą
-C -. curl wyśle nagłówekRange: bytes=OFFSET-i pobierze tylko pozostałe dane. Jest to niezbędne dla dużych plików przy niestabilnych połączeniach.
$ curl -C - -o largefile.zip https://cdn.example.com/largefile.zipcurl --limit-rate: Ogranicz prędkość pobierania
- Co robi
- Flaga
--limit-rateogranicza prędkość pobierania (i wysyłania) do określonej wartości. Akceptuje przyrostki:klubKdla kilobajtów/s,mlubMdla megabajtów/s,glubGdla gigabajtów/s. - Typowe użycie
- Używaj
--limit-rate, aby uniknąć nasycenia przepustowości przy pobieraniu dużych plików, szczególnie na współdzielonych połączeniach. Przydatne jest również do testowania, jak aplikacja radzi sobie z wolnymi odpowiedziami.
$ curl --limit-rate 1M -o bigfile.iso https://mirror.example.com/bigfile.isocurl --max-filesize: Przerwij, jeśli plik jest zbyt duży
- Co robi
- Flaga
--max-filesizenakazuje curl przerwanie transferu, jeśli oczekiwany rozmiar pliku (z nagłówkaContent-Length) przekracza określony limit. Rozmiar może używać przyrostków takich jakk,M,G. - Typowe użycie
- Używaj w skryptach, aby zapobiec niespodziewanie dużym pobieraniom zajmującym miejsce na dysku. Pamiętaj, że nie wszystkie serwery wysyłają
Content-Length— w takim przypadku curl nie może wymusić tego limitu i pobieranie przebiega normalnie.
$ curl --max-filesize 100M -o update.bin https://example.com/update.bincurl -J: Użyj nazwy pliku sugerowanej przez serwer
- Co robi
- Flaga
-J(lub--remote-header-name) nakazuje curl użycie nazwy pliku określonej w nagłówkuContent-Dispositionserwera, zamiast wyodrębniania jej z URL. Jest to typowe dla API pobierania, które zwracają pliki ze znaczącymi nazwami. - Typowe użycie
- Zawsze łącz
-Jz-O. Jest to przydatne, gdy URL jest punktem końcowym API (jak/export?format=csv), ale serwer zwraca właściwą nazwę pliku w nagłówkach. Uwaga dotycząca bezpieczeństwa: serwer kontroluje nazwę pliku, więc używaj tylko z zaufanymi serwerami.
$ curl -L -O -J https://example.com/api/export?format=csvcurl -#: Pokaż pasek postępu
- Co robi
- Flaga
-#(lub--progress-bar) zastępuje domyślny szczegółowy miernik postępu prostym paskiem postępu###. Jest to łatwiejsze do odczytania przy interaktywnym użyciu. - Typowe użycie
- Używaj
-#przy interaktywnym pobieraniu, gdy chcesz czysty wskaźnik postępu. W skryptach preferuj-s(cichy) lub domyślny miernik postępu. Domyślne wyjście curl już pokazuje prędkość, procent, pozostały czas i całkowity rozmiar.
$ curl -# -o archive.tar.gz https://example.com/archive.tar.gzDodatkowe opcje pobierania
Podaj nazwę użytkownika:hasło do uwierzytelniania na serwerze
Ponów próbę transferu przy przejściowych błędach (liczba razy)
Poczekaj tyle sekund między kolejnymi próbami
Wyślij lokalny plik pod URL (domyślnie PUT)
Twórz lokalne katalogi w razie potrzeby przy zapisywaniu wyniku
Ukryj miernik postępu i komunikaty o błędach
Zapisz plik(i) wyjściowe w określonym katalogu (curl 7.73+)
Praktyczne scenariusze pobierania
Te przykłady łączą wiele flag, aby obsłużyć typowe zadania pobierania, które napotkasz w codziennej pracy programistycznej i pisaniu skryptów.
Pobierz wiele plików jednocześnie
Użyj wielu flag -O, aby pobrać kilka plików jednym poleceniem. curl przetwarza je sekwencyjnie. Do równoległego pobierania użyj xargs lub GNU parallel.
$ curl -O https://example.com/file1.txt -O https://example.com/file2.txt -O https://example.com/file3.txtPobierz z serwera FTP
curl natywnie obsługuje FTP, FTPS i SFTP. Dodaj -u user:password do uwierzytelniania. Użyj -O, aby zachować zdalną nazwę pliku.
$ curl -u user:pass -o backup.sql ftp://ftp.example.com/db/backup.sqlPobierz z uwierzytelnianiem
Użyj -u user:pass do Basic Auth lub -H do przekazania tokena Bearer lub klucza API. Połącz z -L i -o do pełnego pobierania.
$ curl -H "Authorization: Bearer eyJhbGciOi..." -L -o data.json https://api.example.com/exportNiezawodne pobieranie z wznawianiem i ponownymi próbami
Połącz -C - (wznawianie), --retry (automatyczne ponowienie przy niepowodzeniu) i -L (podążanie za przekierowaniami) dla solidnych pobrań, które przetrwają przerwy w sieci.
$ curl -C - --retry 5 --retry-delay 10 -L -o largefile.zip https://cdn.example.com/largefile.zipCzęsto zadawane pytania o pobieranie za pomocą curl
Jaka jest różnica między curl -o a curl -O?
-o nazwapliku zapisuje pobrany plik pod dokładną nazwą, którą podasz. -O wyodrębnia nazwę pliku z URL i jej używa. Użyj -o, gdy chcesz niestandardową nazwę lub ścieżkę; użyj -O, gdy nazwa pliku na serwerze jest odpowiednia.
Dlaczego curl pobiera pusty lub HTML-owy plik zamiast właściwego pliku?
URL prawdopodobnie zwraca przekierowanie HTTP (301 lub 302). Domyślnie curl zapisuje samą odpowiedź przekierowania — nie końcową treść. Dodaj -L, aby automatycznie podążać za przekierowaniami: curl -L -o plik URL.
Jak wznowić częściowo pobrany plik za pomocą curl?
Użyj curl -C - -o nazwapliku URL. Flaga -C - wykrywa istniejący rozmiar pliku i wysyła nagłówek Range, aby zażądać tylko pozostałych bajtów. Serwer musi obsługiwać żądania zakresu.
Jak ograniczyć prędkość pobierania w curl?
Użyj --limit-rate z wartością i przyrostkiem: curl --limit-rate 500k -o plik URL ogranicza prędkość do 500 KB/s. Przyrostki: k (KB/s), M (MB/s), G (GB/s).
Czy curl może pobrać wiele plików jednocześnie?
Tak. Użyj wielu flag -O: curl -O URL1 -O URL2 -O URL3. curl pobiera je sekwencyjnie. Do równoległego pobierania przekieruj listę URL do xargs -P 4 -I {} curl -O {}.
Jak pobrać plik wymagający uwierzytelniania?
Dla HTTP Basic Auth: curl -u user:pass -o plik URL. Dla tokenów Bearer: curl -H "Authorization: Bearer TOKEN" -o plik URL. Dla kluczy API w nagłówkach: curl -H "X-API-Key: KEY" -o plik URL.
Jak pobrać pliki z serwera FTP za pomocą curl?
Użyj curl -u user:pass -o localfile ftp://host/path/file. curl natywnie obsługuje FTP, FTPS (FTP przez TLS) i SFTP (SSH FTP). Dla anonimowego FTP pomiń -u.
Jak niezawodnie pobrać duże pliki za pomocą curl?
Połącz -C - (wznawianie przy niepowodzeniu), --retry 5 (automatyczne ponowienie), --retry-delay 10 i -L (podążanie za przekierowaniami): curl -C - --retry 5 --retry-delay 10 -L -o plik URL. To automatycznie obsługuje problemy z siecią.
Jak wyświetlić pasek postępu przy pobieraniu za pomocą curl?
Użyj curl -# -o plik URL dla prostego paska postępu. Domyślne wyjście curl już pokazuje prędkość transferu, procent i szacowany czas. W skryptach użyj -s, aby ukryć całe wyjście.
Czy mogę określić katalog pobierania w curl?
Z curl 7.73+ użyj --output-dir /path/to/dir w połączeniu z -O. Dla starszych wersji podaj pełną ścieżkę za pomocą -o /path/to/dir/filename. Dodaj --create-dirs, jeśli katalog jeszcze nie istnieje.
Czy powinienem używać curl czy wget do pobierania plików?
Oba są doskonałe. wget jest prostszy do rekurencyjnego mirrorowania stron i ma wbudowaną logikę ponawiania. curl obsługuje ponad 25 protokołów (nie tylko HTTP/FTP), jest lepszy do wywołań API i skryptów, obsługuje więcej metod uwierzytelniania i jest dostępny praktycznie na każdym systemie operacyjnym.
Jak używać curl w skrypcie bash do pobierania plików?
Użyj curl -fsSL -o plik URL: -f cicho kończy się niepowodzeniem przy błędach HTTP (nie zapisuje strony błędu), -s cichy, -S pokaż błędy nawet w trybie cichym, -L podążaj za przekierowaniami. Sprawdź kod wyjścia: if ! curl -fsSL -o file URL; then echo "Download failed"; exit 1; fi.