لينكس 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
النسخة المجعدة
ال --version
الخيار يجعل curl
يُبلغ عن إصداره. كما يسرد أيضًا جميع البروتوكولات التي يدعمها.
curl --version
استرجاع صفحة ويب باستخدام curl
إذا أشرنا curl
في صفحة الويب، سيتم استردادها لنا.
curl
ولكن الإجراء الافتراضي هو إرساله إلى نافذة المحطة الطرفية ككود مصدر.
إذا لم تخبر
curl
إذا كنت تريد تخزين شيء ما كملف، فسوف يقوم دائمًا بتفريغه في نافذة المحطة الطرفية. إذا كان الملف الذي يسترده ملفًا ثنائيًا، فقد تكون النتيجة غير متوقعة. قد يحاول shell تفسير بعض قيم البايت في الملف الثنائي كأحرف تحكم أو تسلسلات إفلات.
حفظ البيانات في ملف
دعنا نخبر curl بإعادة توجيه الإخراج إلى ملف:
curl > bbc.html
هذه المرة لا نرى المعلومات المسترجعة، بل يتم إرسالها مباشرة إلى الملف نيابة عنا. نظرًا لعدم وجود مخرجات نافذة طرفية لعرضها، curl
يخرج مجموعة من معلومات التقدم.
لم يحدث هذا في المثال السابق لأن معلومات التقدم كانت متناثرة في جميع أنحاء كود مصدر صفحة الويب، لذا curl
تم قمعها تلقائيا.
في هذا المثال، curl
يكتشف أن الإخراج يتم إعادة توجيهه إلى ملف وأن من الآمن إنشاء معلومات التقدم.
المعلومات المقدمة هي:
- ٪ المجموع:المبلغ الإجمالي المطلوب استرداده.
- ٪ تلقى:النسبة المئوية والقيم الفعلية للبيانات المسترجعة حتى الآن.
- % إكسفرد:النسبة المئوية والمبلغ الفعلي المرسل، إذا تم تحميل البيانات.
- متوسط سرعة التحميل:متوسط سرعة التنزيل.
- متوسط سرعة التحميل:متوسط سرعة التحميل.
- الوقت الإجمالي:المدة الإجمالية المقدرة للتحويل.
- الوقت المستغرق:الوقت المنقضي حتى الآن لهذه التحويلات.
- الوقت المتبقي:الوقت المقدر المتبقي لإتمام عملية النقل
- السرعة الحالية:سرعة النقل الحالية لهذا النقل.
لأننا قمنا بإعادة توجيه الإخراج من curl
إلى ملف، لدينا الآن ملف يسمى “bbc.html”.
سوف يؤدي النقر المزدوج على هذا الملف إلى فتح المتصفح الافتراضي لديك بحيث يعرض صفحة الويب التي تم استردادها.
لاحظ أن العنوان الموجود في شريط عنوان المتصفح هو ملف محلي على هذا الكمبيوتر، وليس موقع ويب بعيدًا.
لا يتعين علينا إعادة توجيه المخرجات لإنشاء ملف. يمكننا إنشاء ملف باستخدام -o
خيار (الإخراج) وإخبار curl
لإنشاء الملف. هنا نستخدم -o
الخيار وتوفير اسم الملف الذي نرغب في إنشاءه “bbc.html”.
curl -o bbc.html
استخدام شريط التقدم لمراقبة التنزيلات
لاستبدال معلومات التنزيل النصية بشريط تقدم بسيط، استخدم -#
خيار (شريط التقدم).
curl -x -o bbc.html
إعادة تشغيل التنزيل المتقطع
من السهل إعادة تشغيل عملية تنزيل تم إنهاؤها أو مقاطعتها. لنبدأ تنزيل ملف كبير الحجم. سنستخدم أحدث إصدار من Ubuntu 18.04 للدعم طويل الأمد. نحن نستخدم --output
خيار لتحديد اسم الملف الذي نرغب في حفظه فيه: “ubuntu180403.iso”.
curl --output ubuntu18043.iso
يبدأ التنزيل ويستمر حتى الانتهاء.
إذا قاطعنا التنزيل بالقوة Ctrl+C
، يتم إرجاعنا إلى موجه الأوامر، ويتم التخلي عن التنزيل.
لإعادة تشغيل التنزيل، استخدم -C
(استمر في) الخيار. هذا يسبب curl
لإعادة تشغيل التنزيل عند نقطة محددة أو إزاحة داخل الملف المستهدف. إذا استخدمت شرطة -
كما الإزاحة، curl
سوف ينظر إلى الجزء الذي تم تنزيله بالفعل من الملف ويحدد الإزاحة الصحيحة التي يجب استخدامها لنفسه.
curl -C - --output ubuntu18043.iso
تم إعادة تشغيل التنزيل. curl
يقوم بالإبلاغ عن الإزاحة التي يتم إعادة التشغيل عندها.
مع -I
باستخدام خيار (head)، يمكنك استرداد رؤوس HTTP فقط. وهذا يشبه إرسال أمر HTTP HEAD إلى خادم الويب.
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
معالجة كل سطر من ملف النص كمعلمة واحدة.
عندما تقوم بتشغيل الأمر، ستشاهد عمليات تنزيل متعددة تبدأ وتنتهي، واحدة تلو الأخرى.
يُظهر الفحص في مستعرض الملفات أن الملفات المتعددة تم تنزيلها. يحمل كل ملف الاسم الذي كان يحمله على الخادم البعيد.
تنزيل الملفات من خادم FTP
استخدام curl
مع بروتوكول نقل الملفات يعد استخدام خادم (FTP) أمرًا سهلاً، حتى إذا كان عليك المصادقة باستخدام اسم مستخدم وكلمة مرور. لتمرير اسم مستخدم وكلمة مرور باستخدام curl
استخدم -u
(المستخدم) ثم اكتب اسم المستخدم وعلامة النقطتين “:” وكلمة المرور. لا تضع مسافة قبل أو بعد علامة النقطتين.
هذا هو خادم FTP مجاني للاختبار يستضيفه ريبكسيحتوي موقع FTP التجريبي على اسم مستخدم محدد مسبقًا وهو “demo”، وكلمة المرور هي “password”. لا تستخدم هذا النوع من اسم المستخدم وكلمة المرور الضعيفين على خادم FTP “حقيقي” أو خادم إنتاجي.
curl -u demo:password ftp://test.rebex.net
curl
يكتشف أننا نشيره إلى خادم FTP، ويعيد قائمة بالملفات الموجودة على الخادم.
الملف الوحيد على هذا الخادم هو ملف “readme.txt” بطول 403 بايت. لنسترجعه. استخدم نفس الأمر كما فعلت منذ لحظة، مع إضافة اسم الملف إليه:
curl -u demo:password ftp://test.rebex.net/readme.txt
تم استرجاع الملف و curl
يعرض محتوياته في نافذة المحطة الطرفية.
في أغلب الأحوال، سيكون من الأفضل أن يتم حفظ الملف المسترد على القرص بالنسبة لنا، بدلاً من عرضه في نافذة المحطة الطرفية. مرة أخرى، يمكننا استخدام -O
(ملف بعيد) أمر إخراج لحفظ الملف على القرص، بنفس اسم الملف الموجود على الخادم البعيد.
curl -O -u demo:password ftp://test.rebex.net/readme.txt
يتم استرداد الملف وحفظه على القرص. يمكننا استخدام ls
للتحقق من تفاصيل الملف، فهو يحمل نفس اسم الملف الموجود على خادم FTP، وله نفس الطول، 403 بايت.
ls -hl readme.txt
إرسال المعلمات إلى الخوادم البعيدة
ستقبل بعض الخوادم البعيدة المعلمات في الطلبات المرسلة إليها. يمكن استخدام المعلمات لتنسيق البيانات المسترجعة، على سبيل المثال، أو يمكن استخدامها لتحديد البيانات الدقيقة التي يرغب المستخدم في استردادها. غالبًا ما يكون من الممكن التفاعل مع الويب واجهات برمجة التطبيقات (واجهات برمجة التطبيقات) باستخدام curl
.
كمثال بسيط، اي بيفاي يحتوي موقع الويب على واجهة برمجة تطبيقات يمكن الاستعلام عنها للتأكد من عنوان IP الخارجي الخاص بك.
curl
عن طريق إضافة format
باستخدام المعلمة “json” للأمر، يمكننا مرة أخرى طلب عنوان IP الخارجي الخاص بنا، ولكن هذه المرة سيتم ترميز البيانات المسترجعة بتنسيق تنسيق JSON.
curl ?format=json
فيما يلي مثال آخر يستخدم واجهة برمجة تطبيقات Google. وهو يعيد كائن JSON يصف كتابًا. المعلمة التي يجب عليك توفيرها هي الرقم القياسي الدولي للكتاب (ISBN) رقم الكتاب. يمكنك العثور على هذه الأرقام على الغلاف الخلفي لمعظم الكتب، وعادةً أسفل الرمز الشريطي. والمعلمة التي سنستخدمها هنا هي “0131103628”.
curl
البيانات المسترجعة شاملة:
أحيانًا تجعيد الشعر، وأحيانًا أخرى wget
إذا كنت أرغب في تنزيل محتوى من موقع ويب والبحث بشكل متكرر في هيكل الشجرة الخاص بموقع الويب عن هذا المحتوى، فسأستخدم wget
.
إذا كنت أرغب في التفاعل مع خادم بعيد أو واجهة برمجة تطبيقات، وربما تنزيل بعض الملفات أو صفحات الويب، فسأستخدم curl
. وخاصة إذا كان البروتوكول واحدًا من العديد من البروتوكولات التي لا يدعمها wget
.