Как использовать power shell invoke web request с прокси сервером

Командлет Invoke-WebRequest в PowerShell — удобный инструмент для отправки HTTP-запросов на веб-сайты. Если вы уже пользуетесь прокси-сервисами Bright Data, вы можете использовать этот командлет с прокси-сервером, указав параметр -Proxy, а затем сведения о прокси-сервере.

4 min read

Bright Data favicon

Invoke-Webrequest With a Proxy

Ознакомившись с этим руководством по прокси-серверу Invoke-WebRequest PowerShell, вы узнаете:

Давайте узнаем подробности! 

Что такое PowerShell Invoke-WebRequest?

Invoke-WebRequest — это командлет PowerShell для отправки запросов HTTP, HTTPS и FTP веб-серверам и веб-службам. По умолчанию он автоматически анализирует ответ, полученный от сервера, и возвращает подборки форм, ссылок, изображений и других важных элементов HTML. 

Обычно он используется для доступа к интерфейсам REST API, загрузки файлов из Интернета или взаимодействия с веб-службами. Ниже приведен базовый синтаксис запроса Invoke-WebRequest:

Invoke-WebRequest [-Uri] <Uri> [-Method <WebRequestMethod>] [-Headers <IDictionary>] [-Body <Object>]

Ключевые параметры, которые следует запомнить:

  • – Uri: URI веб-ресурса, на который отправлен запрос.
  • – Method: HTTP-метод для использования в запросе (например, GET, POST, PUT, DELETE). Invoke-WebRequest по умолчанию отправляет запросы GET.
  • – Headers — дополнительные HTTP-заголовки, которые необходимо включить в запрос.
  • – Body — тело запроса для отправки на сервер.

Как видите, единственный обязательный аргумент — это . Таким образом, вкратце, самый простой синтаксис для выполнения запроса GET к заданному URI:

Invoke-WebRequest <Uri>

Этот командлет был добавлен в PowerShell 3.0 в 2012 году. 

Установка Invoke-WebRequest

Чтобы использовать Invoke-WebRequest, вам понадобится PowerShell. Итак, давайте узнаем, как установить PowerShell и получить доступ к командлету Invoke-WebRequest!

Windows

Во-первых, вы должны понять, что Windows PowerShell и PowerShell — это две разных программы. Windows PowerShell — это версия PowerShell, поставляемая вместе с Windows, и ее последняя версия — 5.1. Windows PowerShell содержит командлет Invoke-WebRequest. Это означает, что если вы используете современную версию Windows, вы готовы сразу же приступить к делу! При наличии более старых версий следуйте указаниям в официальном руководстве по установке PowerShell.

В то же время некоторые функции Invoke-WebRequest доступны только в версии PowerShell 7.x и более поздних версиях. Дополнительные сведения о том, как установить PowerShell 7.x, приводятся в официальном руководстве по миграции с Windows PowerShell 5.1 на PowerShell 7. Обратите внимание, что PowerShell 7.x устанавливается в новый каталог и работает параллельно с Windows PowerShell 5.1.

Вы можете узнать, какая версия PowerShell установлена на вашем компьютере под управлением ОС Windows, с помощью следующей команды:

$PSVersionTable

В PowerShell 7.x нужно ввести что-то вроде этого:

PSVersion                      7.4.1

PSEdition                      Core

GitCommitId                    7.4.1

OS                             Microsoft Windows 10.0.22631

Platform                       Win32NT

PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}

PSRemotingProtocolVersion      2.3

SerializationVersion           1.1.0.1

WSManStackVersion              3.0

macOS и Linux

Предварительные требования для начала работы с прокси-сервером в PowerShell

Чтобы начать использовать прокси-сервер PowerShell с Invoke-WebRequest, вам необходимо понять, как выглядит URL-адрес прокси-сервера. 

Вот URL-адрес прокси-сервера PowerShell Invoke-WebRequest:

<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]

Он включает следующее:

  • — протокол, используемый для подключения к прокси-серверу.
  • — IP-адрес или URL-адрес имени хоста прокси-сервера.
  • — номер порта, который прослушивает прокси-сервер.
  • — необязательное имя пользователя, которое нужна указать, когда требуется аутентификация на прокси-сервере.
  • — необязательный пароль, который нужно указать, когда требуется аутентификация на прокси-сервере.

Обратите внимание, что часть URL-адреса :// необходима для Invoke-WebRequest. Если вы не укажете ее, выполнение запроса завершится со следующей ошибкой:

Invoke-WebRequest: эта операция не поддерживается для относительного URI.

Что касается протоколов прокси-серверов, то наиболее популярными являются HTTP, HTTPS и SOCKS. В PowerShell 5.1 Invoke-WebRequest поддерживает только HTTP, а в PowerShell 7.x — также HTTPS и SOCKS.

Пора получить действительный прокси-сервер HTTP!

Вы можете найти его бесплатно в Интернете, как показано ниже:

Protocol: HTTP; IP Address: 190.6.23.219; Port: 999

Подготовьте эту информацию, чтобы получить следующий URL-адрес прокси-сервера:

http://190.6.23.219:999

Предупреждение

Бесплатные прокси-серверы можно использовать для обучения, но вы не можете полагаться на них в реальных ситуациях. Бесплатные прокси-серверы ненадежны, подвержены ошибкам, медленны, существенно ограничивают объем передаваемых данных и недолговечны. Не используйте их!

Каково решение? Прокси-серверы премиум-класса от Bright Data — лучшего поставщика данных услуг на рынке. Подпишитесь и попробуйте наши надежные прокси-серверы бесплатно.

http://admin-4521:@rUuH3tJqf45.103.203.109:9571

Как указать прокси-сервер HTTP в Invoke-WebRequest

Прежде чем начать, запустите следующую команду в PowerShell:

Invoke-WebRequest "https://httpbin.org/ip"

That should print something like:

StatusCode        : 200

StatusDescription : OK

Content           : {

                      "origin": "194.34.233.12"

                    }

RawContent        : HTTP/1.1 200 OK

                    Connection: keep-alive

                    Access-Control-Allow-Origin: *

                    Access-Control-Allow-Credentials: true

                    Content-Length: 32

                    Content-Type: application/json

                    Date: Thu, 01 Feb 2024 10:46:14 GMT...

Forms             : {}

Headers           : {[Connection, keep-alive], [Access-Control-Allow-Origin, *], [Access-Control-Allow-Credentials,

                    true], [Content-Length, 32]...}

Images            : {}

InputFields       : {}

Links             : {}

ParsedHtml        : mshtml.HTMLDocumentClass

RawContentLength  : 32

Если вы хотите получить доступ только к полю «Контент», вы можете сделать это следующим образом:

$response = Invoke-WebRequest "https://httpbin.org/ip"

$response.Content

This would print:

{

  "origin": "194.34.233.12"

}

Использование параметра командной строки

Invoke-WebRequest предлагает флаг -Proxy для указания URL-адреса прокси-сервера для запроса.

:/>  Windows 10 не видит сканер что делать

Итак, синтаксис использования Invoke-WebRequest на прокси-сервере выглядит следующим образом:

Invoke-WebRequest -Proxy "<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]" <Uri>

Если теперь вы выполните эту команду PowerShell:

Invoke-WebRequest -Proxy "http://190.6.23.219:999" "https://httpbin.org/ip"
Invoke-WebRequest -Uri "http://httpbin.org/ip" -Proxy "http://brd.superproxy.io:22225" -ProxyCredential (New-Object System.Management.Automation.PSCredential("brd-customer-CUSTOMER_ID-zone-ZONE’S_NAME", ("ZONE’S_PASSWORD" | ConvertTo-SecureString -AsPlainText -Force)))

The result should be:

StatusCode        : 200

StatusDescription : OK

Content           : {

                      "origin": "190.6.23.219"

                    }

RawContent        : HTTP/1.1 200 OK

                    Connection: keep-alive

                    Access-Control-Allow-Origin: *

                    Access-Control-Allow-Credentials: true

                    Content-Length: 31

                    Content-Type: application/json

                    Date: Thu, 01 Feb 2024 12:36:56 GMT...

Forms             : {}

Headers           : {[Connection, keep-alive], [Access-Control-Allow-Origin, *], [Access-Control-Allow-Credentials,

                    true], [Content-Length, 31]...}

Images            : {}

InputFields       : {}

Links             : {}

ParsedHtml        : mshtml.HTMLDocumentClass

RawContentLength  : 31

Примечание: не забывайте, что бесплатные прокси-серверы недолговечны! К тому времени, когда вы прочитаете это руководство, маловероятно, что вышеуказанный сервер все еще будет работать. В случае ошибки замените его новым прокси-сервером.

Использование переменных окружения

Начиная с версии PowerShell 7.0, Invoke-WebRequest поддерживает конфигурацию прокси-сервера с помощью переменных окружения

Таким образом, другой способ использования прокси-сервера PowerShell в Invoke-WebRequest заключается в установке следующих двух окружений:

  • HTTP_PROXY — это URL-адрес прокси-сервера, используемый для HTTP-запросов;
  • HTTPS_PROXY — это URL-адрес прокси-сервера, используемый для HTTPS-запросов.

В Windows можно задать две переменные окружения, используя следующий синтаксис PowerShell:

$env:HTTP_PROXY = "<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"

$env:HTTPS_PROXY = "<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"

В нашем примере команды будут выглядеть следующим образом:

$env:HTTP_PROXY = "http://190.6.23.219:999"

$env:HTTPS_PROXY = "http://190.6.23.219:999"

В macOS и Linux вам необходимо использовать следующий синтаксис:

export HTTP_PROXY="<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"

export HTTPS_PROXY="<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"

Итак, две команды будут следующими:

export http_proxy="http://190.6.23.219:999"

export https_proxy="http://190.6.23.219:999"

Отныне каждый запрос Invoke-WebRequest будет проходить через указанные прокси-серверы без необходимости добавлять опцию -Proxy. После настройки envs запустите следующую команду:

Invoke-WebRequest "https://httpbin.org/ip"

You will get the same result as before:

StatusCode        : 200

StatusDescription : OK

Content           : {

                      "origin": "190.6.23.219"

                    }

RawContent        : HTTP/1.1 200 OK

                    Connection: keep-alive

                    Access-Control-Allow-Origin: *

                    Access-Control-Allow-Credentials: true

                    Content-Length: 31

                    Content-Type: application/json

                    Date: Thu, 01 Feb 2024 12:36:56 GMT...

Forms             : {}

Headers           : {[Connection, keep-alive], [Access-Control-Allow-Origin, *], [Access-Control-Allow-Credentials,

                    true], [Content-Length, 31]...}

Images            : {}

InputFields       : {}

Links             : {}

ParsedHtml        : mshtml.HTMLDocumentClass

RawContentLength  : 31

Чтобы отключить прокси-серверы Invoke-WebRequest, отключите переменные окружения с помощью:

$env:HTTP_PROXY = ""

$env:HTTPS_PROXY = ""

Or on macOS and Linux:

unset HTTP_PROXY

unset HTTPS_PROXY

Как использовать прокси HTTPS и SOCKS в PowerShell

Если вам требуется использовать прокси-сервер HTTPS или SOCKS, необходимо обновить PowerShell до версии 7.x и выше. В противном случае Invoke-WebRequest завершится ошибкой:

:/>  Установка windows

Invoke-WebRequest: ServicePointManager не поддерживает прокси-серверы со схемой https.

Или в случае прокси-сервера SOCKS:

Invoke-WebRequest: ServicePointManager не поддерживает прокси-серверы со схемой socks.

При работе с прокси-серверами HTTPS или SOCKS в PowerShell 7.x структура команд Invoke-WebRequest остается прежней:

Invoke-WebRequest -Proxy "<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]" <Uri>

Отличия заключаются в том, что будет использовать https, socks4, socks4a, socks5 или socks5a вместо http.

Если вы попытаетесь вызвать запрос через прокси-сервер, использующий протокол, отличный от указанного выше, вы получите следующую ошибку:

Invoke-WebRequest: Only the 'http', 'https', 'socks4', 'socks4a' and 'socks5' schemes are allowed for proxies.

Таким образом, полный пример прокси-запроса Invoke-WebRequest SOCKS выглядит так:

Invoke-WebRequest -Proxy "socks5://94.14.109.54:3567" "http://httpbin.org/ip"

As you can expect, the result will be:

StatusCode        : 200

StatusDescription : OK

Content           : {

                      "origin": "94.14.109.54"

                    }

RawContent        : HTTP/1.1 200 OK

                    Connection: keep-alive

                    Access-Control-Allow-Origin: *

                    Access-Control-Allow-Credentials: true

                    Content-Length: 31

                    Content-Type: application/json

                    Date: Thu, 01 Feb 2024 12:47:56 GMT...

Forms             : {}

Headers           : {[Connection, keep-alive], [Access-Control-Allow-Origin, *], [Access-Control-Allow-Credentials,

                    true], [Content-Length, 31]...}

Images            : {}

InputFields       : {}

Links             : {}

ParsedHtml        : mshtml.HTMLDocumentClass

RawContentLength  : 31

Необходимые советы и рекомендации

Ознакомьтесь с полезными уловками и ценными советами по работе с прокси-сервером PowerShell Invoke-WebRequest на профессиональном уровне.

Игнорирование конфигурации прокси-сервера PowerShell

Если вы хотите запретить Invoke-WebRequest использовать настроенный прокси-сервер PowerShell для чтения из переменных окружения, вы можете воспользоваться параметром -NoProxy следующим образом:

Invoke-WebRequest -NoProxy <Uri>

Эта команда предписывает Invoke-WebRequest связаться с без использования прокси-сервера.

Чтобы убедиться в работоспособности данного подхода, настройте прокси-сервер в envs и запустите его:

Invoke-WebRequest -NoProxy "https://httpbin.org/ip"
Avoid SSL Certificate Errors

При использовании прокси-сервера HTTP ваши запросы могут не выполняться из-за ошибок SSL-сертификата. Чтобы избежать этого, задайте параметр -SkipCertificateCheck:

Invoke-WebRequest -SkipCertificateCheck -Proxy "<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]" <Uri>

– SkipCertificateCheck помогает избежать ошибок сертификатов, разрешая небезопасные подключения к серверу. Имейте в виду, что использование этого параметра небезопасно. Задавайте его только при работе с известными хостами.

Например, вы можете связываться с HTTPBin через прокси-сервер, обходя проблемы с SSL, с помощью следующего:

Invoke-WebRequest -SkipCertificateCheck -Proxy "http://190.6.23.219:999" "https://httpbin.org/ip"

Какой прокси-сервер PowerShell следует использовать?

Ответ на этот вопрос меняется в зависимости от того, чего вы хотите достичь с помощью запроса Invoke-WebRequest. Чтобы найти подходящий прокси-сервер PowerShell для ваших нужд, ознакомьтесь с различными типами доступных прокси-серверов:

  • Прокси-серверы центров обработки данных: они быстрые и дешевые, но сайты могут легко обнаружить и заблокировать их из-за их идентифицируемых диапазонов IP-адресов.
  • Резидентные прокси-серверы: они предлагают ротацию подлинных IP-адресов с реальных устройств в определенных местах. Это означает, что они могут гарантировать высокий уровень анонимности. Резидентные прокси-серверы идеально подходят для доступа к сайтам, использующим географические ограничения, или для обхода мер по борьбе с ботами.
  • Прокси-серверы интернет-провайдеров (ISP): они безопасны, быстры и очень надежны, поскольку предоставляют статические IP-адреса устройств, зарегистрированных у интернет-провайдеров. Прокси-серверы ISP также называют резидентными статическими прокси-серверами, и они являются идеальным решением для мониторинга оптимизации поисковых систем (SEO) и исследования рынка.
  • Мобильные прокси-серверы: они предоставляют IP-адреса с реальных мобильных устройств для обеспечения высокого уровня анонимности. Они полезны для доступа к приложениям, сайтам или контенту, специально разработанному для мобильных устройств.

Заключение

Из этого руководства по прокси-серверу PowerShell вы узнали, что представляет собой инструмент Invoke-WebRequest, как он работает и как его использовать с прокси-сервером HTTP/HTTPS/SOCKS. Как оказалось, нельзя полагаться на прокси-серверы от бесплатных поставщиков. Поэтому единственное решение, которое необходимо принять, — это выбор поставщика услуг прокси-серверов. Экономьте время и энергию и обращайтесь непосредственно к Bright Data — лучшей компании на рынке в этой области.

:/>  Как исправить ошибку reg exe и Msvcp140?

Bright Data управляет лучшими прокси-серверами в мире, обслуживая компании из списка Fortune 500 и более 20 000 клиентов. Ее всемирная сеть прокси-серверов включает в себя:

В целом, это одна из крупнейших и самых надежных на рынке прокси-сетей, ориентированных на скрейпинг. 

Поговорите с одним из наших торговых представителей и узнайте, какие продукты Bright Data лучше всего отвечают вашим потребностям.

Кредитная карта не требуется

10 октября 2023

В 2018 г. появилось программное обеспечение PowerShell Core 6.0 как кроссплатформенный инструмент автоматизации для операционных систем Windows, Linux и MacOS. PowerShell Core имеет открытый исходный код и работает на платформе .NET Core 2.x, в отличии от предыдущих версий, работающих на .NET Framework.
В статье представлен обзор, как изменилось использование PowerShell с версии 6 до последнего обновления 7.x. 

Вступление

Переход на PowerShell Core требовался для обеспечения кроссплатформенности продукта, но при этом привел к снижению функциональности, стабильности и надежности. Кроме того, пользователи столкнулись с проблемами совместимости с существующими модулями Windows PowerShell.

  • Не поддерживаются уже привычные решения:
  • Возможность параллельного выполнения команд с помощью workflows.
  • Нет поддержки WMI v1 и соответственно не работают командлеты Get-WmiObject, Invoke-WmiMethod, Register-WmiEvent и т.д.
  • Исчезли командлеты связанные с графическим отображением такие, как Out-GridView, Show-Command и параметр -ShowWindow
  • Не работают модули ActiveDirectory и DnsClient.

0

 В начале 2020 г. компания Microsoft выпустила PowerShell 7.0. В этом программном обеспечении удалось решить большую часть проблем 6-ой версии. 7-ая версия основана на .NET Core 3.x, где поддерживается множество API .NET Framework, обеспечивая обратную совместимость с более 90% существующих модулей Windows PowerShell. Теперь поддерживаются модули ActiveDirectory, DnsClient, DnsServer, BitLocker, BranchCache, Defender, Hyper-V и многие другие, полный список которых приводится на сайте Microsoft. 
Вернулись командлеты требующие графическую функциональность, такие как Out-GridView и Show-Command. Повысилась стабильность и производительность.

В PowerShell 7.0 появились новые функции, в том числе:

  • параллелизация конвейера с помощью ForEach-Object -Parallel;
  • новые операторы:
  • упрощенное динамическое представление ошибок и командлет Get-Error для более легкого анализа ошибок;
  • автоматические уведомления о новых версиях;
  • возможность вызывать ресурсы DSC непосредственно из PowerShell 7.

 Жизненый цикл  PowerShell 7.0 теперь соответствует политике жизненного цикла поддержки .NET Core и включает выпуски Long Term Service и non-Long Term Service.

1

Осенью 2020 г. вышла общедоступная версия PowerShell 7.1, основанная на  .NET 5.0.
В этой версии появился ряд новых функций и обновлений:

  • PSReadLine 2.1.0 с прогнозной технологией IntelliSense
  • Версия PowerShell 7.1 опубликована в Microsoft Store.
  • Пакеты установщика обновлены для новых версий ОС с поддержкой ARM64.
  • 2 экспериментальные функции PSNullConditionalOperators и PSUnixFileStat стали основными.
  • Добавлены 4 экспериментальные функции Microsoft.PowerShell.Utility.PSManageBreakpointsInRunspace, PSNativePSPathResolution,  PSCultureInvariantReplaceOperator и PSSubsystemPluginModel.

2

PowerShell 7.2 — это следующий выпуск Long Term Servicing (LTS) на основе .NET 6.0.
Новые возможности, обновления и критические изменения:

  • Добавлены новые универсальные пакеты установщика для большинства поддерживаемых дистрибутивов Linux.
  • Включена поддержка Центра обновления Майкрософт в Windows.
  • Добавлены две новые экспериментальные возможности.

– Улучшена поддержка передачи аргументов собственных команд.
– Включена поддержка цвета в ANSI для FileInfo.

  • Улучшены варианты заполнения нажатием клавиши TAB.
  • Семь экспериментальных функций стали основными, одна удалена.
  • Платформа DSC отделена от PowerShell 7, чтобы обеспечить возможность внесения будущих улучшений.
  • Несколько критических изменений для повышения удобства использования.

3

В начале 2023 г. появилась версия PowerShell 7.3, основанная на  .NET 7.0.

Некоторые критические изменения в новой версии:

  • PowerShell 7.3 не работает в Windows 7. 
  • PowerShell Direct для Hyper-V поддерживается только в Windows 10, версия 1809 и более поздних версиях.
  • Test-Connection не работает из-за намеренного критического изменения в .NET 7 
  • Перемещение определения данных типа System.Security.AccessControl.ObjectSecurity в модуль Microsoft.PowerShell.Security. 
  • Дополнительные улучшения заполнения нажатием клавиши TAB.
  • Улучшена обработка ошибок.
  • Улучшены сеансы и удаленное взаимодействие.
  • Обновлены ряд командлетов.
  • Добавлены новые экспериментальные функции.

УЦ АйТи Клауд по направлению системное администрирование, сетевые технологии, безопасность сетей

Курсы к статье

Будьте в курсе всех событий

Затрудняетесь
с выбором курса?

Оставьте заявку на консультацию

Хотите преподавать в АйТи Клауд?

Если вы имеете компетенции и хотите работать тренером курсов в АйТи Клауд – оставьте ваши данные, мы свяжемся с вами!

Оставьте комментарий