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. Параметри командлета мають більший пріоритет, ніж значення у сесії веб-запиту.

В отриманій змінній буде міститися інформація про