هل سبق لك أن تمنيت تصفح الويب عبر سطر الأوامر؟ نعم، أنا أيضًا. لكن هل سبق لك أن احتجت إلى استخراج معلومات من صفحة ويب، أو مراقبة موقع ويب أو إرسال معلومات عبر التحكم التلقائي؟ لقد فعلت ذلك، واستخدمت Invoke-Webrequest للقيام بذلك!
أمر Invoke-WebRequest في PowerShell هو السكينة السويسرية للويب. يمكن لهذا الأمر إرسال أي فعل HTTP إلى خدمة ويب مع الأشياء الشائعة مثل معلمات HTTP، وتحديد رؤوس HTTP المختلفة وما إلى ذلك. Invoke-WebRequest جنبا إلى جنب مع أخيه، Invite-RestMethod، هما الأمران في PowerShell اللذان سترغب في تعرفهما إذا كنت بحاجة إلى القيام بأي نوع من الأتمتة على الويب.
أمر Invoke-WebRequest هو جزء من وحدة Microsoft.PowerShell.Utility التي تأتي مع Windows PowerShell وPowerShell Core. تم تضمين هذا الأمر مع PowerShell منذ الإصدار v3 وهو واحد من الأوامر القوية للغاية وسهلة الاستخدام.
من خلال استخدام Invoke-WebRequest، يسمح PowerShell للمطور بالعمل مع مواقع الويب وخدمات الويب وواجهات برمجة التطبيقات REST بطرق مختلفة كثيرة.
الاستخدام الأساسي
عند استخدامه بشكله الأبسط، يرسل أمر Invoke-WebRequest طريقة طلب HTTP إلى نقطة النهاية مثل URI أو URL. يدعم الأمر جميع الطرق الشائعة للطلب.
بواسطة بعيدًا، أكثر الطرق شيوعًا هي الطريقة GET. تقوم هذه الطريقة بقراءة المعلومات مثل المعلومات من موقع الويب أو ربما استعلام واجهة برمجة التطبيقات البيانية. تتم تحديد الطريقة باستخدام Method
المعلمة. نظرًا لأننا بحاجة إلى نقطة نهاية للتحقيق، سنحتاج أيضًا إلى معرف موارد متميز. لجعل الأمر سهلاً، سأختار أي موقع. للترويج بشكل فاضح لـ TechSnips، سأختار techsnips.io.
لنفترض أنني أريد الحصول على قائمة بجميع أحدث مقاطع الفيديو المنشورة كما هو موضح أدناه.

I can get an HTML representation of this page by running Invoke-WebRequest -Uri 'https://techsnips.io' -Method GET
. When I do this, Invoke-WebRequest
downloads the entire web page and returns an output with various parsed information around the elements of the page.

للحصول على مقاطع الفيديو، سأحتاج إلى البحث قليلاً. عندما ألقي نظرة على خاصية الروابط، أرى تشابهًا يكمن في أن جميع روابط الفيديو تحتوي على فئة ng-binding
كما هو موضح أدناه.

بمجرد معرفتي بهذا، يمكنني بعد ذلك العثور على جميع تلك العناصر وإرجاع الخاصية innerHTML
فقط وبسهولة!

تنزيل الملفات باستخدام Invoke-WebRequest
يمكننا أيضًا استخدام Invoke-WebRequest
لتنزيل الملفات من الويب أيضًا وهو سهل حقًا! يمكننا تنزيل الملفات ببساطة عن طريق توجيه Invoke-WebRequest
إلى معرف موارد متميز لملف واستخدام المعلمة OutFile
لإخبار الأمر النصي بحفظ الملف إلى القرص المحلي.
كمثال، أدناه أقوم بتنزيل أداة SysInternals Handle وتوسيع ملف zip بمجرد التنزيل. إنها حقًا بهذه السهولة!
تقديم نموذج والعمل مع الجلسات
يمكننا استخدام Invoke-WebRequest
لملء النماذج أيضًا. ولكن للقيام بذلك ، عادةً ما نحتاج إلى العمل مع جلسات الويب. إن HTTP بروتوكول لا يحمل حالة طبيعيًا ويجب أن يكون متصفحك (في هذه الحالة PowerShell) قادرًا على إنشاء جلسة يتم استخدامها لتتبع أشياء مثل الكوكيز، على سبيل المثال. إحدى الأشكال الشائعة هي نموذج تسجيل الدخول / كلمة المرور، لذا دعونا نسجل الدخول إلى موقع ويب تخيلي!
لنفترض أن نموذج تسجيل الدخول الخيالي هو على الرابط http://somewebsite.com. يتعين علينا أولاً تشغيل Invoke-WebRequest
لتنزيل هيكل HTML وإنشاء جلسة.
بمجرد فعلنا ذلك، ستحتوي الاستجابة على خاصية Forms
يمكننا ملءها بالاسم وكلمة المرور. في هذه الحالة، يُمثل اسم المستخدم حقلًا يُسمى user
ويجب أن تكون كلمة المرور في حقل يُسمى password
. سيعتمد ذلك على صفحة الويب.
بمجرد ملء النموذج، يمكننا استخدام Invoke-WebRequest
مرة أخرى ولكن هذه المرة نعيد استخدام الجلسة التي أنشأناها للتو ونحدد تلقائيًا عنوان URI الذي سنرسله إليه عن طريق قراءة خاصية Action
التي تظهر على النموذج كما هو موضح أدناه.
إذا كنت قد قمت بتسمية جميع حقول النموذج بشكل صحيح ولم تقم صفحة الويب بفعل أي شيء متقدم، يجب أن تكون قد تم تسجيل الدخول بنجاح باستخدام اسم المستخدم وكلمة المرور داخل متغير الجلسة الويب $rb
. في هذه المرحلة، يمكنك قراءة العديد من الصفحات وراء تلك المصادقة إذا كنت تستخدم متغير الجلسة الويب $rb
.
أخيرًا ، استخدام رائع آخر لـ Invoke-WebRequest
هو حل عناوين URL القصيرة. ربما تحتاج إلى معرفة ما يوجد خلف تلك العنوان URL المختصر ولكنك لا ترغب في النقر عليه لمعرفة ذلك! لا مشكلة. باستخدام Invoke-WebRequest
، يمكننا قراءة خاصية AbsoluteUri
من الاستجابة المحللة التي يقدمها لنا!
لاحظ أدناه أنني أستخدم أيضًا معلمة UseBasicParsing
. بشكل افتراضي ، يحاول Invoke-WebRequest
استخدام Internet Explorer (IE) لتحليل HTML المُرجع. هذا لا يعمل على الأنظمة التي لا تحتوي على IE. للتغلب على ذلك ، يمكننا استخدام معلمة UseBasicParsing
لتنزيل المحتوى ولكن تحليله بشكل خفيف فقط.
الملخص
إن cmdlet Invoke-WebRequest
هو واحد من أكثر الcmdlets المتنوعة التي تأتي مع PowerShell. إذا كان هناك إجراء يمكن أداؤه عبر مستعرض رسومي نموذجي ، فإن cmdlet Invoke-WebRequest
يستطيع فعل ذلك أيضًا. يمكنك العثور على مثال على استخدام هذا cmdlet عن طريق النظر في هذا المقال حول مراقبة واجهات برمجة تطبيقات REST.