یک پنجره ترمینال روی دسکتاپ لینوکس به سبک اوبونتو.
Fatmawati Achmad Zaenuri / Shutterstock

دستورالعمل لینوکس curl می تواند خیلی بیشتر از فایلهای بارگیری انجام دهد. دریابید که [حلقه حلقه چه توانایی دارد و چه زمانی باید به جای ویجت استفاده کنید.

حلقه در مقابل wget : تفاوت چیست؟

مردم غالباً در تلاش برای شناسایی نقاط قوت نسبی دستورات wget و curl هستند . این دستورات با هم همپوشانی دارند. هرکدام می توانند فایلها را از مکانهای از راه دور بازیابی کنند ، اما این جایی است که شباهت به پایان می رسد.

wget ابزاری فوق العاده برای بارگیری محتوا و پرونده ها است. این می تواند پرونده ها ، صفحات وب و دایرکتوری ها را بارگیری کند. این برنامه شامل روالهای هوشمند برای گذر از پیوندها در صفحات وب و بارگیری به صورت بازگشتی مطالب در کل وب سایت است. این به عنوان یک مدیر بارگیری در خط فرمان بی نظیر است.

حلقه یک نیاز کاملاً متفاوت را برآورده می کند. بله ، می تواند پرونده ها را بازیابی کند ، اما نمی تواند به صورت بازگشتی به وب سایت هدایت شود که به دنبال محتوا برای بازیابی است. آنچه حلقه را در واقع انجام می دهد این است که با ایجاد درخواست به آن سیستم ها ، با سیستم های از راه دور ارتباط برقرار می کنید و پاسخ های آنها را برای شما بازیابی و نمایش می دهید. این پاسخ ها ممکن است محتوا و پرونده های صفحه وب باشد ، اما همچنین می توانند داده های ارسالی از طریق یک سرویس وب یا API را در نتیجه "سؤالی" که توسط درخواست curl پرسیده شده باشد ، ارائه دهند.

و curl فقط به وب سایت محدود نمی شود. حلقه بیش از 20 پروتکل ، از جمله HTTP ، HTTPS ، SCP ، SFTP و FTP را پشتیبانی می کند. و مسلماً به دلیل استفاده برتر از لوله های لینوکس ، curl می تواند به راحتی با سایر دستورات و اسکریپت ها یکپارچه شود.

نویسنده curl دارای یک صفحه وب است که تفاوت ها را شرح می دهد. وی بین حلقه و wget را می بیند.

نصب حلقه

از رایانه هایی که برای تحقیق در مورد این مقاله استفاده می کردند ، Fedora 31 و Manjaro 18.1.0 حلقه داشتند قبلاً نصب شده است. حلقه باید در اوبونتو 18.04 LTS نصب شود. روی اوبونتو ، این دستور را نصب کنید تا آن را نصب کنید:

 sudo apt-get curl install 

 sudo apt-get curl install در پنجره ترمینال

نسخه curl

- نسخه گزینه باعث می شود curl نسخه خود را گزارش کند. همچنین پروتکل های پشتیبانی شده خود را لیست می کند.

 curl --version 

 curl --version در یک پنجره ترمینال

بازیابی یک صفحه وب

اگر ما curl ] در یک صفحه وب ، آن را برای ما بازیابی می کند.

 curl https://www.پراکسی.com 

 https://www.پراکسی.com را در یک پنجره ترمینال

حلقه کنید. اقدام پیش فرض آن پرتاب آن به عنوان کد منبع به پنجره ترمینال است.

 خروجی از نمایشگر کد منبع صفحه وب در یک پنجره ترمینال.

مراقب باشید : به حلقه کن را بخواهید که می خواهید چیزی به عنوان پرونده ذخیره شود ، همیشه آن را به پنجره ترمینال می اندازد. اگر پرونده ای که در حال بازیابی است یک پرونده باینری باشد ، نتیجه می تواند غیرقابل پیش بینی باشد. پوسته ممکن است سعی کند برخی از مقادیر بایت موجود در پرونده باینری را به عنوان شخصیت های کنترل یا توالی فرار تفسیر کند.

ذخیره داده ها در یک پرونده

بیایید به curl بگوییم که خروجی را به یک فایل تغییر مسیر دهد:

 curl https: //www.پراکسی.com> پراکسی.html 

 curl https://www.پراکسی.com> پراکسی.html در یک پنجره ترمینال

این بار ما اطلاعات بازیابی شده را نمی بینیم ، مستقیماً برای ما برای پرونده ارسال می شود از آنجا که هیچ نمایشگاهی از پنجره ترمینال برای نمایش وجود ندارد ، curl مجموعه ای از اطلاعات مربوط به پیشرفت را ارائه می دهد.

این در مثال قبلی این کار را انجام نمی داد زیرا اطلاعات مربوط به پیشرفت می توانست در منبع صفحه وب پراکنده باشد. کد ، بنابراین حلقه به طور خودکار آن را سرکوب کرد.

در این مثال ، curl تشخیص می دهد که خروجی به یک فایل هدایت می شود و از تولید اطلاعات پیشرفت بی خطر است. [19659008]  کنتور پیشرفت بارگیری در پنجره ترمینال

اطلاعات ارائه شده عبارتند از:

  • ٪ Total : کل مبلغ مورد بازیابی.
  • ٪ دریافت : درصد و مقادیر واقعی داده های بازیابی شده تاکنون.
  • ٪ Xferd : در صورت بارگذاری داده ها ، درصد و واقعی ارسال می شود.
  • میانگین سرعت بارگذاری : میانگین سرعت بارگیری.
  • متوسط ​​بارگذاری سرعت : میانگین سرعت بارگذاری.
  • تعداد کل زمان : مدت زمان کل انتقال تخمین زده شده است.
  • زمان سپری شده : مدت زمان سپری شده برای این انتقال.
  • Time Left : زمان تخمینی برای انتقال برای تکمیل [19659035] سرعت فعلی : سرعت انتقال فعلی برای این انتقال.

از آنجا که ما خروجی را از curl به یک پرونده هدایت کردیم ، اکنون پرونده ای با عنوان "پراکسی.html" داریم.

 پرونده پراکسی.html ایجاد شده توسط curl.

با دوبار کلیک کردن روی آن فایل ، مرورگر پیش فرض شما باز خواهد شد تا صفحه وب بازیابی شده را نشان دهد.

 صفحه وب بازیابی شده در یک پنجره مرورگر disdplayed

توجه داشته باشید که آدرس موجود در نوار آدرس مرورگر یک فایل محلی در این رایانه است ، نه یک وب سایت راه دور.

برای ایجاد یک خروجی لازم نیست را تغییر دهیم . فایل. ما می توانیم با استفاده از گزینه -o (خروجی) ، و گفتن curl را برای ایجاد پرونده ایجاد کنیم. در اینجا ما از گزینه -o استفاده می کنیم و نام پرونده مورد نظر برای ایجاد "پراکسی.html" را ارائه می دهیم.

 curl -o پراکسی.html https://www.پراکسی.com 

 curl -o پراکسی.html https://www.پراکسی.com در یک پنجره ترمینال

با استفاده از نوار پیشرفت برای نظارت بر بارگیری

تا اطلاعات بارگیری متن مبتنی بر متن ساده جایگزین شود نوار پیشرفت ، از گزینه - # (نوار پیشرفت) استفاده کنید.

 curl -x -o پراکسی.html https://www.پراکسی.com 

 curl -x -o پراکسی.html https://www.پراکسی.com در یک پنجره ترمینال

راه اندازی مجدد بارگیری مجدد

مجدداً بارگیری مجدد بارگیری که خاتمه یافته یا قطع شده است ، آسان است. بیایید بارگیری یک پرونده با اندازه را شروع کنیم. ما از آخرین ساخت بلند مدت پشتیبانی اوبونتو 18.04 استفاده خواهیم کرد. ما از گزینه - output برای مشخص کردن نام پرونده ای که می خواهیم آن را ذخیره کنیم استفاده می کنیم: "ubuntu180403.iso."

 curl --output ubuntu18043.iso http: // انتشار .ubuntu.com / 18.04.3 / ubuntu-18.04.3-desktop-amd64.iso 

 curl --output ubuntu18043.iso http://releases.ubuntu.com/18.04.3/ubuntu-18.04.3- desktop-amd64.iso در یک پنجره ترمینال

بارگیری شروع می شود و کار خود را به اتمام می رساند.

 Progess یک بارگیری بزرگ در یک گسترده terminal

اگر به زور قطع کنیم بارگیری با Ctrl + C ، ما به صفحه فرمان بازگردانده می شویم ، و بارگیری آن متوقف می شود.

برای راه اندازی مجدد بارگیری ، از -C استفاده کنید (در ادامه) گزینه. این باعث می شود که curl بارگیری مجدد را در یک نقطه مشخص یا جبران در پرونده هدف مجدداً آغاز کند. اگر از یک hyphen - به عنوان افست استفاده می کنید ، curl بخشی از بارگیری شده در فایل را بررسی می کند و جبران صحیحی برای استفاده برای خود را تعیین می کند.

 curl-C - --output ubuntu18043.iso http://releases.ubuntu.com/18.04.3/ubuntu-18.04.3-desktop-amd64.isoociation19659064LOADcurl -C - --output ubuntu18043.iso http: // نسخه. ubuntu.com/18.04.3/ubuntu-18.04.3-desktop-amd64.iso پنجره ترمینال اینا " width="646" height="77" src="/pagespeed_static/1.JiBnMqyl6S.gif" onload="pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);" onerror="this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);"/> 

بارگیری مجدداً آغاز شد. curl جبران خاموشي را كه در آن دوباره راه اندازي شده است را گزارش مي كند.

 curl -C - --output ubuntu18043.iso http://releases.ubuntu.com/18.04.3/ubuntu-18.04. 3-desktop-amd64.iso در یک پنجره ترمینال

بازیابی عناوین HTTP

با گزینه -I (head) ، می توانید فقط هدرهای HTTP را بازیابی کنید. این همان ارسال فرمان HTTP HEAD به یک سرور وب است.

 curl -I www.twitter.com 

 curl -I www.twitter.com در یک پنجره ترمینال

این دستور بازیابی می شود فقط اطلاعات؛ هیچ صفحه وب یا پرونده ای بارگیری نمی شود.

 خروجی از curl -I www.twitter.com در یک پنجره ترمینال

بارگیری URL های چندگانه

با استفاده از xargs ما می توانیم چندین URL را به طور همزمان بارگیری کنیم. شاید بخواهیم یک سری صفحه وب را بارگیری کنیم که یک مقاله یا آموزش واحد را تشکیل می دهد.

این URL ها را در یک ویرایشگر کپی کنید و آن را در پرونده ای بنام "urls-to-download.txt" ذخیره کنید. ما می توانیم از xargs برای درمان محتوای هر سطر از متن متن به عنوان پارامتری که آن را به حلقه می دهد ، به نوبه خود.

 https://tutorials.ubuntu.com/tutorial/ آموزش-ایجاد-یک-USB-stick-on-ubuntu # 0
https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#1
https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#2
https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#3
https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#4
https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#5ociation19659077 ناب این دستور دستوری است که ما باید برای عبور از  xargs  این آدرس ها به  حلقه  یک بار یک بار: 

 xargs -n 1 curl -O <urls-to-download.txt 

توجه داشته باشید که این دستور از -O (از راه دور پرونده) دستور خروجی ، که از یک حرف بزرگ "O." استفاده می کند. این گزینه باعث می شود curl فایل بازیابی شده را با همان نام موجود در پرونده روی سرور راه دور ذخیره کند.

گزینه 1 به xargs می دهد تا هر خط از فایل متنی را به عنوان یک پارامتر واحد درمان کنید.

وقتی دستور را اجرا می کنید ، مشاهده می کنید بارگیری های متعدد شروع و پایان ، یکی پس از دیگری.

 خروجی از xargs و حلقه بارگیری چندین فایل

بررسی در مرورگر پرونده نشان می دهد که چندین فایل بارگیری شده اند. هرکدام نام خود را روی سرور از راه دور دارد.

 پرونده بارگیری شده مرورگر پرونده nautilus

ارتباط: نحوه استفاده از دستور xargs در لینوکس

بارگیری پرونده ها از سرور FTP

استفاده از حلقه با یک سرور پروتکل انتقال فایل (FTP) سرور آسان است ، حتی اگر مجبور باشید با نام کاربری و رمزعبور احراز هویت کنید. برای گذراندن نام کاربری و رمز عبور با حلقه از گزینه -u (user) استفاده کنید و نام کاربری ، یک کلمه “:” و رمز را وارد کنید. فضایی را قبل یا بعد از روده بزرگ قرار ندهید.

این یک سرور FTP برای آزمایش رایگان است که توسط Rebex میزبانی می شود. سایت FTP دارای یک نام کاربری از پیش تعیین شده "نسخه ی نمایشی" است و رمز عبور "رمز عبور" است. از این نوع نام کاربری و رمز عبور ضعیف در سرور FTP تولیدی یا "واقعی" استفاده نکنید.

 curl -u نسخه ی نمایشی: password ftp://test.rebex.net 

curl -u demo: demo ftp://test.rebex.net در یک پنجره ترمینال " width="646" height="57" src="/pagespeed_static/1.JiBnMqyl6S.gif" onload="pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);" onerror="this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);"/>

curl ما آن را به یک سرور FTP نشان می دهیم ، و لیستی از پرونده های موجود در سرور را برمی گردانیم.

 لیست پرونده های روی یک پنجره ترمینال اینا سرور Remotee FTP

تنها پرونده در این سرور یک پرونده "readme.txt" با طول 403 بایت وجود دارد. بیایید آن را بازیابی کنیم. از همان دستور لحظه قبل استفاده کنید ، با نام پرونده ای که به آن پیوست شده است:

 curl -u demo: demo ftp://test.rebex.net/readme.txtociation19659077LOADociation19459069 ftp://test.rebex.net/readme.txt در یک پنجره ترمینال " width="646" height="77" src="/pagespeed_static/1.JiBnMqyl6S.gif" onload="pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);" onerror="this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);"/> 

پرونده بازیابی می شود و curl محتوای آن را در پنجره ترمینال نمایش می دهد.

 محتویات پرونده ای که از یک سرور FTP گرفته شده در یک پنجره ترمینال نمایش داده می شود

تقریباً در همه موارد ، به جای اینکه در پنجره ترمینال نمایش داده شود ، راحت تر می توان فایل بازیابی شده را برای ما ذخیره کرد. . یکبار دیگر می توانیم از دستور خروجی -O (پرونده از راه دور) استفاده کنیم تا پرونده در دیسک ذخیره شود ، با همان نام خانوادگی که در سرور از راه دور دارد.

 curl-O-demo demo: رمز عبور ftp://test.rebex.net/readme.txtociation19659077 هوادار 19459073 معروفcurl -O -u نسخه ی نمایشی: پسورد ftp://test.rebex.net/readme.txt در یک پنجره ترمینال " width="646" height="77" src="/pagespeed_static/1.JiBnMqyl6S.gif" onload="pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);" onerror="this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);"/> [19659008] پرونده بازیابی و در دیسک ذخیره می شود. برای بررسی جزئیات پرونده می توانیم از  ls  استفاده کنیم. این اسم را با همان پرونده در سرور FTP دارد و به همان طول ، 403 بایت است. 

 ls -hl readme.txt 

 ls -hl readme.txt در یک پنجره ترمینال

ارتباط: نحوه استفاده از فرمان FTP در لینوکس

ارسال پارامترها به سرورهای از راه دور

برخی از سرورهای از راه دور پارامترهایی را در درخواستهایی که برای آنها ارسال می شود قبول می کنند. . به عنوان مثال ممکن است از پارامترها برای قالب بندی داده های برگشتی استفاده شود یا از آنها برای انتخاب داده های دقیقی که کاربر می خواهد بازیابی کند استفاده می شود. تعامل با رابط های برنامه نویسی برنامه وب (API) اغلب با استفاده از curl ممکن است.

به عنوان یک مثال ساده ، وب سایت ipify دارای API است که می توانید برای تعیین آدرس IP خارجی خود درخواست کنید.

 curl https://api.ipify.org 

با اضافه کردن پارامتر به دستور ، با مقدار "json" می توانیم دوباره آدرس IP خارجی خود را درخواست کنیم ، اما این بار داده های برگشتی در قالب JSON رمزگذاری خواهد شد.

 حلقه https://api.ipify.org؟format=jsonociation19659077 قراردادن19459077bowcurl https://api.ipify.org در یک پنجره ترمینال " width="646" height="122" src="/pagespeed_static/1.JiBnMqyl6S.gif" onload="pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);" onerror="this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);"/> [19659008] یک مثال دیگر که استفاده از API Google را ارائه می دهد. این یک موضوع JSON را توصیف می کند که یک کتاب را توصیف می کند. پارامتری که باید ارائه دهید ، شماره کتاب استاندارد بین المللی (ISBN) یک کتاب است. می توانید این موارد را در پشت جلد اکثر کتاب ها ، معمولاً در زیر بارکد پیدا کنید. پارامتری که در اینجا از آن استفاده خواهیم کرد "0131103628" است. 

 https://www.googleapis.com/books/v1/volumes؟q=isbn:0131103628 موفق19659077- غلط 19459079pozcurl https:// www. googleapis.com/books/v1/volumes؟q=isbn:0131103628 در یک پنجره ترمینال " width="646" height="77" src="/pagespeed_static/1.JiBnMqyl6S.gif" onload="pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);" onerror="this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);"/> 

داده های برگردان جامع است:

 داده های API کتاب Google نمایش داده شده در یک پنجره ترمینال [19659010] گاهی اوقات مجعد ، گاهی ویجت

اگر می خواستم محتوا را از وب سایت بارگیری کنم و ساختار درخت وب سایت را بطور بازگشتی برای آن محتوا جستجو کنم ، می خواهم از wget استفاده کنم.

اگر من می خواستم با یک سرور از راه دور یا API ارتباط برقرار کنم و احتمالاً برخی از فایل ها یا صفحات وب را بارگیری کنم ، می خواهم از حلقه استفاده کنم. به خصوص اگر پروتکل یکی از موارد بسیاری بود که توسط wget پشتیبانی نمی شد.

</p>
<pre>نحوه استفاده از curl برای بارگیری فایلها از خط فرمان لینوکس<br />