PowerShell. Парсинг сайту або забрати значення із сайту.
Іноді при виконанні скрипта доводиться спиратися на значення з веб-сайтів. PowerShell з версією 3.0 має чудовий командлет Invoke-WebRequest.
Розглянемо докладніше скрипт:
. У рядку $trash = $li.innerhtml -match "\((.*?)\)" прибрати прогалини всередині ковзачок "\((.*?)\)".
Цей скрипт виконує такі дії: на сайті «http://coolcode.ru» ми знаходимо рубрику «Адміністрування» і дивимося скільки в цій рубриці статей.
На початку ми створюємо об'єкт зі сторінкою сайту:
Тут використовується найголовніший командлет Invoke-WebRequest
У цьому прикладі ми використовуємо лише необхідні параметри:
Командлет Invoke-WebRequest підтримує такі протоколи: HTTP, HTTPS, FTP та FILE. В даному параметрі необхідно вказати URL-адресу до сторінки, в нашому випадку це http://coolcode.ru'.
Визначає метод, який використовується для веб-запиту. Допустимі значення: Default, Delete, Get, Head, Merge, Options, Patch, Post, Put та Trace.
Пробіжимося в крації за ними:
Head Отримання заголовка, без тіла. В основному використовується для отримання матаданих.
Get Застосовується для отримання вмісту вказаного ресурсу.
Options Використовується для визначення можливостей веб-сервера або параметрів з'єднання.
Post Використовується для передачі даних на сервер.
Put Завантаження вмісту на вказаний uri.
Patch Теж саме, що і Put але тільки застосовується на фрагмент ресурсу
Delete Видаляє вказаний ресурс.
Trace Повертає отриманий запит, з інформацією про додавання та зміну запиту проміжними серверами.
Merge …
-ContentType
Визначає тип вмісту у веб-запиті.за замовчуванням application/x-www-form-urlencoded. Я використовую цей метод для отримання даних у правильному кодуванні :-ContentType «text/plain; charset = utf-8». У мене чомусь цей параметр через раз працював з "-Method GET", після зміни на "-Method POST" все працює коректно.
У командлета Invoke-WebRequest існують також багато цікавих параметрів, які можуть бути вам цікаві:
Даний параметр задає тіло запиту і використовується для заповнення полів на сайті. (Цей параметр розглянемо в іншій статті)
-Certificate
Задає сертифікат для реалізації безпеки у веб-запиті. Щоб знайти сертифікат, скористайтеся командлетом Get-PfxCertificate або використовуйте Get-ChieldItem на диску Cert:. Якщо сертифікат не є дійсним або не має достатніх повноважень, команда не виконається.
-CertificateThumbprint
Задає обліковий запис користувача, який має право надсилати запит на цифровий сертифікат відкритого ключа (X509).
-Credential
Задає обліковий запис користувача, який має дозвіл на надсилання запиту. За промовчанням використовується поточний користувач.
-DisableKeepAlive
Встановлює значення постійного HTTP з'єднання в HTTP-заголовку значення False. За промовчанням постійне з'єднання HTTP увімкнено.
Встановлює заголовок веб-запиту. Можна вказати хеш-таблицю чи словник.
Отримання вмісту веб-запиту з файлу.
Визначає, скільки разів Windows PowerShell може здійснити спроби з'єднання із заданим URI, перш ніж виникне помилка підключення. За промовчанням значення 5. Значення 0 блокує всі спроби.
Зберігає тіло відповіді у вказаному файлі.
Повертає результати до консолі, на додаток до записурезультатів у файл. Використовується разом із параметром -OutFile
Задає проксі-сервер для виконання запиту.
-ProxyCredential
Установки облікового запису для проксі. Наприклад, «User01» або «Domain01\User01».
-ProxyUseDefaultCredentials
Для підключення до проксі використовувати облікові дані поточного користувача.
-SessionVariable
Створює сеанс веб-запиту та зберігає його у значення вказаної змінної. Змінну необхідно вводити без долара «$». При вказівці змінної сеансу Invoke-WebRequest створює об'єкт сеансу веб-запиту та присвоює його змінній із зазначеним ім'ям. Ви зможете використовувати цю змінну, як тільки закінчиться виконання запиту. Цей об'єкт не є постійним з'єднанням. Він містить інформацію про зв'язок запиту, кукіси, облікові дані, максимальні значення кількості з'єднань та рядки агента користувача. Цей об'єкт можна використовувати для обміну станами даних між веб-запитами.
-TimeoutSec
Даний параметр задає час, протягом якого запит може перебувати в очікуванні. Час вказується за секунди. Значення за замовчуванням 0, що на невизначений тайм-аут (скільки завгодно довгий).
-TransferEncoding
Визначає значення стиснення заголовка HTTP. Допустимі значення Chunked, Compress, Deflate, GZip та Identity.
-UseBasicParsing
Використання об'єкта відповіді HTML без синтаксичного аналізу DOM.
-UseDefaultCredentials
Використання облікових даних поточного користувача для надсилання веб-запиту.
Використовувати рядок для аутентифікації сайтом агента. За промовчанням використовується "Mozilla/5.0 (Windows NT; Windows NT 6.1; en-US) WindowsPowerShell/3.0".
-WebSession
Призначає сеансвеб-запиту. Змінна вказується зі знаком долара ($).
Щоб змінити значення параметрів у сеансі Інтернету, використовуйте параметри командлета, наприклад UserAgent або Credential. Параметри командлета мають більший пріоритет, ніж значення у сесії веб-запиту.
В отриманій змінній буде міститися інформація про