كيفية استخدام curl لتنزيل الملفات من سطر أوامر Linux

لينكس curl يمكن أن يقوم الأمر بأكثر من مجرد تنزيل الملفات. اكتشف ما curl هل هو قادر على ذلك، ومتى يجب عليك استخدامه بدلاً من ذلك wget.




curl مقابل wget : ما هو الفرق؟

غالبًا ما يواجه الناس صعوبة في تحديد نقاط القوة النسبية wget و curl الأوامر. تتداخل هذه الأوامر في بعض الوظائف. يمكن لكل منها استرداد الملفات من مواقع بعيدة، ولكن هذا هو المكان الذي ينتهي فيه التشابه.

wget هو أداة رائعة لتنزيل المحتوى والملفاتيمكنه تنزيل الملفات وصفحات الويب والدلائل. ويحتوي على روتينات ذكية لتصفح الروابط في صفحات الويب وتنزيل المحتوى بشكل متكرر عبر موقع ويب بالكامل. وهو لا يضاهى كمدير تنزيل سطر أوامر.

curl يرضي حاجة مختلفة تمامانعم، يمكنه استرداد الملفات، لكنه لا يستطيع التنقل بشكل متكرر عبر موقع ويب بحثًا عن محتوى لاسترداده. ماذا curl في الواقع، يتيح لك هذا الأمر التفاعل مع الأنظمة البعيدة من خلال تقديم طلبات إلى هذه الأنظمة، واسترداد ردودها وعرضها لك. قد تكون هذه الردود عبارة عن محتوى وملفات لصفحات الويب، ولكنها قد تحتوي أيضًا على بيانات مقدمة عبر خدمة ويب أو واجهة برمجة تطبيقات نتيجة “السؤال” الذي يطرحه طلب curl.


و curl لا يقتصر على المواقع الإلكترونية. curl يدعم أكثر من 20 بروتوكولاً، بما في ذلك HTTP وHTTPS وSCP وSFTP وFTP. ومن الممكن القول إنه بسبب قدرته الفائقة على التعامل مع أنابيب Linux، curl يمكن دمجها بسهولة أكبر مع الأوامر والبرامج النصية الأخرى.

المؤلف curl لديه صفحة ويب يصف الاختلافات التي يراها بين curl و wget.

كيفية تثبيت كيرل

من بين أجهزة الكمبيوتر المستخدمة لبحث هذه المقالة، كان لدى Fedora 31 وManjaro 18.1.0 curl تم تثبيته بالفعل. curl كان لابد من تثبيته على Ubuntu 18.04 LTS. على Ubuntu، قم بتشغيل هذا الأمر لتثبيته:

sudo apt-get install curl

sudo apt-get install curl في نافذة المحطة الطرفية

النسخة المجعدة

ال --version الخيار يجعل curlيُبلغ عن إصداره. كما يسرد أيضًا جميع البروتوكولات التي يدعمها.


curl --version

curl --version في نافذة المحطة الطرفية

استرجاع صفحة ويب باستخدام curl

إذا أشرنا curl في صفحة الويب، سيتم استردادها لنا.

curl 

تجعيد في نافذة المحطة الطرفية

ولكن الإجراء الافتراضي هو إرساله إلى نافذة المحطة الطرفية ككود مصدر.

إخراج من curl يعرض كود مصدر صفحة الويب في نافذة المحطة الطرفية


إذا لم تخبر
curl
إذا كنت تريد تخزين شيء ما كملف، فسوف يقوم دائمًا بتفريغه في نافذة المحطة الطرفية. إذا كان الملف الذي يسترده ملفًا ثنائيًا، فقد تكون النتيجة غير متوقعة. قد يحاول shell تفسير بعض قيم البايت في الملف الثنائي كأحرف تحكم أو تسلسلات إفلات.

حفظ البيانات في ملف

دعنا نخبر curl بإعادة توجيه الإخراج إلى ملف:

curl  > bbc.html

bbc.html في نافذة المحطة الطرفية” data-img-url=”https://static1.howtogeekimages.com/wordpress/wp-content/uploads/2019/11/30-1.png” src=”https://static1.howtogeekimages.com/wordpress/wp-content/uploads/2019/11/30-1.png” style=”display:block;height:auto;max-width:100%;”/>

هذه المرة لا نرى المعلومات المسترجعة، بل يتم إرسالها مباشرة إلى الملف نيابة عنا. نظرًا لعدم وجود مخرجات نافذة طرفية لعرضها، curl يخرج مجموعة من معلومات التقدم.

لم يحدث هذا في المثال السابق لأن معلومات التقدم كانت متناثرة في جميع أنحاء كود مصدر صفحة الويب، لذا curl تم قمعها تلقائيا.


في هذا المثال، curl يكتشف أن الإخراج يتم إعادة توجيهه إلى ملف وأن من الآمن إنشاء معلومات التقدم.

مقياس تقدم تنزيل curl في نافذة المحطة الطرفية

المعلومات المقدمة هي:

  • ٪ المجموع:المبلغ الإجمالي المطلوب استرداده.
  • ٪ تلقى:النسبة المئوية والقيم الفعلية للبيانات المسترجعة حتى الآن.
  • % إكسفرد:النسبة المئوية والمبلغ الفعلي المرسل، إذا تم تحميل البيانات.
  • متوسط ​​سرعة التحميل:متوسط ​​سرعة التنزيل.
  • متوسط ​​سرعة التحميل:متوسط ​​سرعة التحميل.
  • الوقت الإجمالي:المدة الإجمالية المقدرة للتحويل.
  • الوقت المستغرق:الوقت المنقضي حتى الآن لهذه التحويلات.
  • الوقت المتبقي:الوقت المقدر المتبقي لإتمام عملية النقل
  • السرعة الحالية:سرعة النقل الحالية لهذا النقل.


لأننا قمنا بإعادة توجيه الإخراج من curl إلى ملف، لدينا الآن ملف يسمى “bbc.html”.

ملف bbc.html تم إنشاؤه بواسطة curl.

سوف يؤدي النقر المزدوج على هذا الملف إلى فتح المتصفح الافتراضي لديك بحيث يعرض صفحة الويب التي تم استردادها.

تم عرض صفحة الويب المسترجعة في نافذة المتصفح.

لاحظ أن العنوان الموجود في شريط عنوان المتصفح هو ملف محلي على هذا الكمبيوتر، وليس موقع ويب بعيدًا.


لا يتعين علينا إعادة توجيه المخرجات لإنشاء ملف. يمكننا إنشاء ملف باستخدام -o خيار (الإخراج) وإخبار curl لإنشاء الملف. هنا نستخدم -o الخيار وتوفير اسم الملف الذي نرغب في إنشاءه “bbc.html”.

curl -o bbc.html 

curl -o bbc.html في نافذة المحطة الطرفية

استخدام شريط التقدم لمراقبة التنزيلات

لاستبدال معلومات التنزيل النصية بشريط تقدم بسيط، استخدم -# خيار (شريط التقدم).

curl -x -o bbc.html 

curl -x -o bbc.html في نافذة المحطة الطرفية


إعادة تشغيل التنزيل المتقطع

من السهل إعادة تشغيل عملية تنزيل تم إنهاؤها أو مقاطعتها. لنبدأ تنزيل ملف كبير الحجم. سنستخدم أحدث إصدار من Ubuntu 18.04 للدعم طويل الأمد. نحن نستخدم --output خيار لتحديد اسم الملف الذي نرغب في حفظه فيه: “ubuntu180403.iso”.

curl --output ubuntu18043.iso 

curl --output ubuntu18043.iso في نافذة المحطة الطرفية

يبدأ التنزيل ويستمر حتى الانتهاء.

تقدم عملية تنزيل كبيرة في نافذة طرفية


إذا قاطعنا التنزيل بالقوة Ctrl+C ، يتم إرجاعنا إلى موجه الأوامر، ويتم التخلي عن التنزيل.

لإعادة تشغيل التنزيل، استخدم -C (استمر في) الخيار. هذا يسبب curl لإعادة تشغيل التنزيل عند نقطة محددة أو إزاحة داخل الملف المستهدف. إذا استخدمت شرطة - كما الإزاحة، curl سوف ينظر إلى الجزء الذي تم تنزيله بالفعل من الملف ويحدد الإزاحة الصحيحة التي يجب استخدامها لنفسه.

curl -C - --output ubuntu18043.iso 

curl -C - --output ubuntu18043.iso في نافذة المحطة الطرفية

تم إعادة تشغيل التنزيل. curl يقوم بالإبلاغ عن الإزاحة التي يتم إعادة التشغيل عندها.


curl -C - --output ubuntu18043.iso في نافذة المحطة الطرفية

مع -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 ل معالجة محتوى كل سطر من ملف النص كمعلمة سيتم تغذيتها إلى curl، بدوره.

 

هذا هو الأمر الذي نحتاج إلى استخدامه للحصول على xargs مرر هذه الروابط إلى curl واحدا تلو الآخر:


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

لاحظ أن هذا الأمر يستخدم -O أمر الإخراج (الملف البعيد)، والذي يستخدم الحرف الكبير “O”. يتسبب هذا الخيار في curl لحفظ الملف المسترد بنفس الاسم الذي يحمله الملف على الخادم البعيد.

ال -n 1 الخيار يقول xargs معالجة كل سطر من ملف النص كمعلمة واحدة.

عندما تقوم بتشغيل الأمر، ستشاهد عمليات تنزيل متعددة تبدأ وتنتهي، واحدة تلو الأخرى.

الإخراج من xargs و curl تنزيل ملفات متعددة

يُظهر الفحص في مستعرض الملفات أن الملفات المتعددة تم تنزيلها. يحمل كل ملف الاسم الذي كان يحمله على الخادم البعيد.


الملف الذي تم تنزيله في متصفح الملفات nautilus

تنزيل الملفات من خادم FTP

استخدام curl مع بروتوكول نقل الملفات يعد استخدام خادم (FTP) أمرًا سهلاً، حتى إذا كان عليك المصادقة باستخدام اسم مستخدم وكلمة مرور. لتمرير اسم مستخدم وكلمة مرور باستخدام curl استخدم -u (المستخدم) ثم اكتب اسم المستخدم وعلامة النقطتين “:” وكلمة المرور. لا تضع مسافة قبل أو بعد علامة النقطتين.

هذا هو خادم FTP مجاني للاختبار يستضيفه ريبكسيحتوي موقع FTP التجريبي على اسم مستخدم محدد مسبقًا وهو “demo”، وكلمة المرور هي “password”. لا تستخدم هذا النوع من اسم المستخدم وكلمة المرور الضعيفين على خادم FTP “حقيقي” أو خادم إنتاجي.

curl -u demo:password ftp://test.rebex.net

curl -u demo:password ftp://test.rebex.net في نافذة المحطة الطرفية


curl يكتشف أننا نشيره إلى خادم FTP، ويعيد قائمة بالملفات الموجودة على الخادم.

قائمة الملفات الموجودة على خادم FTP عن بعد في نافذة المحطة الطرفية

الملف الوحيد على هذا الخادم هو ملف “readme.txt” بطول 403 بايت. لنسترجعه. استخدم نفس الأمر كما فعلت منذ لحظة، مع إضافة اسم الملف إليه:

curl -u demo:password ftp://test.rebex.net/readme.txt

curl -u demo:password ftp://test.rebex.net/readme.txt في نافذة المحطة الطرفية

تم استرجاع الملف و curl يعرض محتوياته في نافذة المحطة الطرفية.


يتم عرض محتويات الملف المسترد من خادم FTP في نافذة المحطة الطرفية

في أغلب الأحوال، سيكون من الأفضل أن يتم حفظ الملف المسترد على القرص بالنسبة لنا، بدلاً من عرضه في نافذة المحطة الطرفية. مرة أخرى، يمكننا استخدام -O (ملف بعيد) أمر إخراج لحفظ الملف على القرص، بنفس اسم الملف الموجود على الخادم البعيد.

curl -O -u demo:password ftp://test.rebex.net/readme.txt

curl -O -u demo:password ftp://test.rebex.net/readme.txt في نافذة المحطة الطرفية


يتم استرداد الملف وحفظه على القرص. يمكننا استخدام ls للتحقق من تفاصيل الملف، فهو يحمل نفس اسم الملف الموجود على خادم FTP، وله نفس الطول، 403 بايت.

ls -hl readme.txt

ls -hl readme.txt في نافذة المحطة الطرفية

إرسال المعلمات إلى الخوادم البعيدة

ستقبل بعض الخوادم البعيدة المعلمات في الطلبات المرسلة إليها. يمكن استخدام المعلمات لتنسيق البيانات المسترجعة، على سبيل المثال، أو يمكن استخدامها لتحديد البيانات الدقيقة التي يرغب المستخدم في استردادها. غالبًا ما يكون من الممكن التفاعل مع الويب واجهات برمجة التطبيقات (واجهات برمجة التطبيقات) باستخدام curl.

كمثال بسيط، اي بيفاي يحتوي موقع الويب على واجهة برمجة تطبيقات يمكن الاستعلام عنها للتأكد من عنوان IP الخارجي الخاص بك.

curl 


عن طريق إضافة format باستخدام المعلمة “json” للأمر، يمكننا مرة أخرى طلب عنوان IP الخارجي الخاص بنا، ولكن هذه المرة سيتم ترميز البيانات المسترجعة بتنسيق تنسيق JSON.

curl ?format=json

تجعيد في نافذة المحطة الطرفية

فيما يلي مثال آخر يستخدم واجهة برمجة تطبيقات Google. وهو يعيد كائن JSON يصف كتابًا. المعلمة التي يجب عليك توفيرها هي الرقم القياسي الدولي للكتاب (ISBN) رقم الكتاب. يمكنك العثور على هذه الأرقام على الغلاف الخلفي لمعظم الكتب، وعادةً أسفل الرمز الشريطي. والمعلمة التي سنستخدمها هنا هي “0131103628”.

curl 


تجعيد في نافذة المحطة الطرفية

البيانات المسترجعة شاملة:

بيانات واجهة برمجة تطبيقات Google Book معروضة في نافذة المحطة الطرفية

أحيانًا تجعيد الشعر، وأحيانًا أخرى wget

إذا كنت أرغب في تنزيل محتوى من موقع ويب والبحث بشكل متكرر في هيكل الشجرة الخاص بموقع الويب عن هذا المحتوى، فسأستخدم wget.

إذا كنت أرغب في التفاعل مع خادم بعيد أو واجهة برمجة تطبيقات، وربما تنزيل بعض الملفات أو صفحات الويب، فسأستخدم curl. وخاصة إذا كان البروتوكول واحدًا من العديد من البروتوكولات التي لا يدعمها wget.


أضف تعليق