როგორ ჩამოტვირთოთ ფაილები curl-ით
curl არის ერთ-ერთი ყველაზე მრავალმხრივი ბრძანების ხაზის ინსტრუმენტი HTTP, HTTPS, FTP და ათობით სხვა პროტოკოლით ფაილების ჩამოსატვირთად. იქნება ეს ერთი API პასუხის ფაილში შენახვა თუ shell სკრიპტში პარტიული ჩამოტვირთვის ავტომატიზაცია, curl-ს აქვს შესაბამისი ფლაგი. ეს გზამკვლევი მოიცავს ჩამოტვირთვასთან დაკავშირებულ ყველა პარამეტრს — -o და -O-ით ფაილის ძირითადი შენახვიდან, -C --ით შეწყვეტილი გადაცემების განახლებამდე, --limit-rate-ით არხის შეზღუდვამდე და პროგრესის ზოლის ჩვენებამდე. თითოეული ფლაგი მოიცავს მკაფიო ახსნას, გამოყენების ტიპიურ შაბლონებს და კოპირებისთვის მზა მაგალითს.
ჩამოტვირთვის ფლაგების სწრაფი მითითება
გამოსავლის ჩაწერა მითითებულ ფაილში stdout-ის ნაცვლად
გამოსავლის ჩაწერა დისტანციური ფაილის სახელის მქონე ფაილში
HTTP 3xx გადამისამართებების ავტომატური მიყოლა
წინა ფაილის გადაცემის გაგრძელება/განახლება
გადაცემის სიჩქარის შეზღუდვა მითითებულ სიდიდემდე
მითითებულ ზომაზე დიდი ფაილების ჩამოტვირთვაზე უარი
Content-Disposition ჰედერის გამოყენება ფაილის დასახელებისთვის
გადაცემის პროგრესის ჩვენება მარტივი პროგრესის ზოლით
სერვერის ავთენტიფიკაციისთვის username:password-ის მიწოდება
დროებით შეცდომებზე გადაცემის ხელახლა ცდა (რამდენჯერ)
ხელახალი ცდებს შორის ლოდინი ამდენი წამი
ლოკალური ფაილის ატვირთვა 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-ს ეუბნება ავტომატურად აღმოაჩინოს არსებული ნაწილობრივი ფაილის ზომა და განაახლოს ჩამოტვირთვა იქიდან, სადაც შეწყდა. სერვერს უნდა ჰქონდეს HTTPRangeჰედერის მხარდაჭერა.- ტიპიური გამოყენება
- თუ დიდი ჩამოტვირთვა შეწყდა ქსელის პრობლემის ან თაიმაუტის გამო, უბრალოდ ხელახლა გაუშვით იგივე ბრძანება
-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 ბოლო წერტილი (როგორიცაა/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დამატებითი ჩამოტვირთვის პარამეტრები
სერვერის ავთენტიფიკაციისთვის username:password-ის მიწოდება
დროებით შეცდომებზე გადაცემის ხელახლა ცდა (რამდენჯერ)
ხელახალი ცდებს შორის ლოდინი ამდენი წამი
ლოკალური ფაილის ატვირთვა 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.txtFTP სერვერიდან ჩამოტვირთვა
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, ან -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 ჰედერს მხოლოდ დარჩენილი ბაიტების მოსათხოვად. სერვერს უნდა ჰქონდეს range მოთხოვნების მხარდაჭერა.
როგორ შევზღუდო ჩამოტვირთვის სიჩქარე curl-ში?
გამოიყენეთ --limit-rate მნიშვნელობითა და სუფიქსით: curl --limit-rate 500k -o file URL სიჩქარეს ზღუდავს 500 KB/წმ-მდე. სუფიქსები: k (KB/წმ), M (MB/წმ), G (GB/წმ).
შეუძლია 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 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 გამოძახებებისა და სკრიპტებისთვის, მხარს უჭერს მეტ ავთენტიფიკაციის მეთოდს და ხელმისაწვდომია პრაქტიკულად ყველა ოპერაციულ სისტემაზე.
როგორ გამოვიყენო 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.