Я пытаюсь извлечь информацию о событии из Viptela, используя его интерфейс API. Мне удалось получить информацию о предупреждении и токене, но когда я попытался извлечь информацию о событии, вместо JSON с информацией о событии я получил страницу входа HTML.
Я узнал, что до доступа к событию Ссылка API У меня должен быть токен для вызова URL API событий. Я не уверен, какой шаг я пропустил, и он не работает для меня. Может ли кто-нибудь указать на отсутствующий фрагмент из приведенного ниже кода, чтобы исправить проблему?
if (-not ([System.Management.Automation.PSTypeName]'TrustAllCertsPolicy').Type) {
Add-Type -TypeDefinition @"
using System.Net;
using System.Security.Cryptography.X509Certificates;
public class TrustAllCertsPolicy : ICertificatePolicy {
public bool CheckValidationResult(
ServicePoint srvPoint, X509Certificate certificate,
WebRequest request, int certificateProblem) {
return true;
}
}
"@
}
[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy -ErrorAction SilentlyContinue
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$Authorization = [Convert]::ToBase64String(
[Text.Encoding]::ASCII.GetBytes(
(
"{0}:{1}" -f ('UserName' , 'Password')
)
)
)
$Headers = @{"authorization" = "Basic "+$Authorization}
$Uri = "https://vmanage.viptela.net:443/dataservice/client/token"
$gettoken = Invoke-RestMethod -Method Get -Uri $Uri -Headers $Headers -SessionVariable websession
$gettoken.Cookies
$cookie = ($websession.Cookies.GetCookies($Uri)).Value
$body = '{
"query": {
"condition": "AND",
"rules": [
{
"value": [
"1"
],
"field": "entry_time",
"type": "date",
"operator": "last_n_hours"
}
]
}
}'
$Headersnew = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$Headersnew.Add("X-XSRF-TOKEN", $gettoken)
$Headersnew.Add("Authorization", "Basic "+$Authorization)
$Headersnew.Add("Content-Type", "application/json")
$Headersnew.Add("Cookie", "JSESSIONID="+$cookie)
$geteventurl = "https://vmanage.viptela.net:443/dataservice/event"
$getevent = Invoke-RestMethod -Method POST -Uri $geteventurl -body $body -Headers $Headersnew
$getevent
Результат, который я получил, приведен ниже, я попробовал то же самое с помощью PostMan, он отлично работает.
Invoke-RestMethod : ErrorSessionTokenFilter: Token provided via HTTP Header does not match the token generated by the server.
At C:\Users\user\Desktop\00viptela\GetEvents.ps1:58 char:13
+ $getevent = Invoke-RestMethod -Method POST -Uri $geteventurl -body $b ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand
Пожалуйста, помогите.
С уважением, Nare sh