HTTP-запросы с powershell

Я хочу сделать http-запросы на веб-страницы с помощью powershell, возможно ли это, и если да, то как я могу это достичь?

Можно ли отправлять запросы на https-страницы? Я могу сделать http-запросы с файлом bat, но не https, надеялся, что могу https запросить страницы с помощью powershell.

Ответы

Ответ 1

Вы можете использовать обычные классы WebRequest и HttpWebRequest, предоставляемые платформой .NET.

$request = [System.Net.WebRequest]::Create('http://example.com')
# do something with $request

Это не отличается от использования одних и тех же классов и API от С#, за исключением синтаксических различий с PowerShell.

В PowerShell v3 также есть Invoke-WebRequest и несколько других.

Ответ 3

В зависимости от того, что вы делаете, вы также можете использовать System.Net.WebClient, что является упрощенной абстракцией HttpWebRequest

$client = new-object system.net.webclient

Посмотрите на разницу: Какая разница между классами WebClient и HTTPWebRequest в .NET?

PS: С Powershell v3.0 у вас есть командлеты Invoke-WebRequest и Invoke-RestMethod, которые могут использоваться для аналогичных целей

Ответ 4

Если все остальное не работает, используйте Curl из http://curl.haxx.se. Вы можете установить все, включая обработку сертификатов, POST и т.д. Не тонкий, но он работает и обрабатывает все лишние случаи; например вы можете установить флаг --insecure, чтобы игнорировать проблемы с именем сертификата, истечением срока действия или статусом теста.

Ответ 5

Вы можете создавать запросы HTTP, HTTPS, FTP и FILE с помощью командлета Invoke-WebRequest. Это довольно легко и дает много вариантов для игры. Пример. Чтобы сделать простые запросы http/https google.com

Invoke-WebRequest -Uri "http://google.com"

Другие ссылки можно найти MSDN

Ответ 6

Этот код работает как с ASCII & бинарные файлы через https в powershell:

# Add the necessary .NET assembly
Add-Type -AssemblyName System.Net.Http

# Create the HttpClient object
$client = New-Object -TypeName System.Net.Http.Httpclient

# Get the web content.
$task = $client.GetByteArrayAsync("https://stackoverflow.com/info/7715695/http-requests-with-powershell")

# Wait for the async call to finish
$task.wait();

# Write to file
[io.file]::WriteAllBytes('test.html',$task.result)

Проверено на Powershell 5.1.17134.1, Win 10