Странное поведение из Invoke-WebRequest в запланированном задании
Я запускаю сценарий PowerShell, который отправляет данные на внутренний веб-сервер через HTTPS. SSL-сертификат недействителен. я использую
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
принять сертификат, и он работает, когда скрипт запускается из командной строки, но я получаю сообщение об ошибке
You must write ContentLength bytes to the request stream before calling [Begin]GetResponse.
когда побежал как запланированное задание. Точная команда
Invoke-WebRequest -Uri 'https://host/login.cgi' -Method POST -Body 'username&password' -UseBasicParsing
1 ответ
Решение
В конце я просто вернулся к более базовой функциональности.NET:
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
[System.Net.ServicePointManager]::Expect100Continue = $false
$cookies = New-Object System.Net.CookieContainer
$request = [System.Net.HttpWebRequest]::Create('https://host')
$request.Method = 'POST'
$request.CookieContainer = $cookies
$postData = 'stringdata'
$data = [System.Text.Encoding]::ASCII.GetBytes($postData)
$request.ContentLength = $data.Length
$requestStream = $request.GetRequestStream()
$requestStream.Write($data, 0, $data.Length)
$requestStream.Close()
$response = [System.Net.HttpWebResponse]$request.GetResponse()
$responseStream = $response.GetResponseStream()
(New-Object System.IO.StreamReader($responseStream)).ReadToEnd()