Вы когда-нибудь хотели просматривать веб-сайты через командную строку? Да. Я тоже нет. Но вам когда-нибудь приходилось извлекать информацию с веб-страницы, отслеживать сайт или отправлять информацию с помощью автоматизации? Мне да, и для этого я использую Invoke-Webrequest!
Командлет PowerShell Invoke-WebRequest
– это швейцарский нож для веба. Этот командлет может отправлять любой HTTP-глагол на веб-сервис вместе с общими вещами, такими как HTTP-параметры, указывать различные заголовки HTTP и т. д. Invoke-WebRequest
, вместе со своим “братом” Invite-RestMethod
, – это два командлета PowerShell, с которыми вам стоит ознакомиться, если вам нужно выполнять какой-либо вид веб-автоматизации.
Командлет Invoke-WebRequest
является частью модуля Microsoft.PowerShell.Utility, который поставляется с Windows PowerShell и PowerShell Core. Этот командлет был включен в PowerShell с версии 3 и является чрезвычайно мощным, но простым в использовании.
Используя Invoke-WebRequest
, PowerShell позволяет разработчику работать с веб-сайтами, веб-сервисами и REST API различными способами.
Основное использование
В самом простом случае командлет Invoke-WebRequest
отправляет метод запроса HTTP на конечную точку, такую как URI или URL. Этот командлет поддерживает все общие методы запроса.
Далеко не самый распространенный метод – это метод GET. Этот метод считывает информацию, такую как информация с веб-сайта или, возможно, запрос к REST API. Метод определяется с использованием параметра Method
. Поскольку нам нужен конечный пункт для запроса, нам также понадобится URI. Чтобы сделать это просто, я выберу любой веб-сайт. Без совести продвигать 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.

Чтобы получить видеоролики, мне нужно немного поискать. Когда я смотрю на свойство links, я вижу общность в том, что у всех ссылок на видео есть класс ng-binding
, как показано ниже.

Как только я это узнаю, я могу найти все эти элементы и вернуть только свойство innerHTML
, и вуаля!

Загрузка файлов с помощью Invoke-WebRequest
Мы также можем использовать Invoke-WebRequest
для загрузки файлов из Интернета, и это действительно легко! Мы можем загружать файлы, просто указав Invoke-WebRequest
URI файла и использовав параметр OutFile
, чтобы указать cmdlet сохранить файл на локальный диск.
В качестве примера, ниже я загружаю утилиту SysInternals Handle и распаковываю zip-файл после загрузки. Это действительно так просто!
Отправка формы и работа с сеансами
Мы можем использовать Invoke-WebRequest
также для заполнения форм. Для этого нам часто нужно работать с веб-сессиями. HTTP является естественным протоколом без состояния, и ваш браузер (в данном случае PowerShell) должен быть способен создать сессию, которая будет использоваться для отслеживания, например, куки. Обычная форма – это форма входа/пароля, поэтому давайте войдем на вымышленный сайт!
Предположим, что наша вымышленная форма входа находится по адресу http://somewebsite.com. Сначала нам нужно будет выполнить Invoke-WebRequest
, чтобы загрузить структуру HTML и создать сеанс.
После этого ответ будет содержать свойство Forms
, которое мы можем заполнить именем пользователя и паролем. В данном случае имя пользователя представлено полем с именем user
, а пароль должен быть в поле с именем password
. Это будет зависеть от веб-страницы.
После заполнения формы мы можем снова использовать Invoke-WebRequest
, но на этот раз повторно использовать созданную нами сессию и автоматически определить URI для отправки, считывая свойство Action
, которое находится на форме, как показано ниже.
Если вы правильно указали все соответствующие имена полей, и веб-страница не выполняет никаких хитростей, вы должны войти в систему с именем пользователя и паролем внутри переменной веб-сессии $rb
. На этом этапе вы можете читать различные страницы за этой аутентификацией, если используете переменную веб-сессии $rb
.
解决短URI
Наконец, еще одним отличным способом использования Invoke-WebRequest
является разрешение коротких URI. Возможно, вам нужно узнать, что находится за этим сокращенным URL, но вы не хотите нажимать на него, чтобы узнать! Нет проблем. Используя Invoke-WebRequest
, мы можем прочитать свойство AbsoluteUri
из разобранного ответа, который он нам дает!
Обратите внимание, что ниже я также использую параметр UseBasicParsing
. По умолчанию Invoke-WebRequest
пытается использовать Internet Explorer (IE) для разбора возвращенного HTML. Это не работает на системах без IE. Чтобы обойти это, мы можем использовать параметр UseBasicParsing
, чтобы все равно загружать содержимое, но только легко его разбирать.
Сводка
Командлет Invoke-WebRequest
является одним из наиболее гибких командлетов, поставляемых с PowerShell. Если действие может быть выполнено с помощью типичного графического браузера, командлет Invoke-WebRequest
тоже может это сделать. Вы можете найти пример использования этой команды, взглянув на эту статью о мониторинге REST API.