Invoke-WebRequest: Подключение было закрыто (Cisco WEBUI)

Вопрос или проблема

[System.Net.ServicePointManager]::ServerCertificateValidationCallback = { $true }
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls -bor [Net.SecurityProtocolType]::Tls11 -bor [Net.SecurityProtocolType]::Tls12
Invoke-WebRequest -Uri 'https://10.45.210.143/admin/advanced/Phone.json?request'
$url = "https://10.45.210.143/admin/advanced/Phone.json?request"
$jsonData = Invoke-RestMethod -Uri $url -Method GET -UseBasicParsing
# Найти запись с "name": "PSK 1" и извлечь "value"
$psk1Value = $jsonData | Where-Object { $_.name -eq "PSK 1" } | Select-Object -ExpandProperty value
# Проверить, была ли найдена значение, и отобразить его
if ($psk1Value) {
   Write-Host "Значение для 'PSK 1' равно: $psk1Value"
   }

возвращает

Invoke-WebRequest : Основное соединение было закрыто: Произошла неожиданная ошибка при отправке.
На строке:4 символ:1
+ Invoke-WebRequest -Uri 'https://10.45.210.143/admin/advanced/Phone.js ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
 
Invoke-RestMethod : Основное соединение было закрыто: Произошлаunexpected ошибка при отправке.
На строке:6 символ:13
+ $jsonData = Invoke-RestMethod -Uri $url -Method GET -UseBasicParsing
+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand

Пытаюсь распарсить данные Java… испытываю большие трудности. Есть идеи?

Пытаюсь распарсить данные Java, чтобы отобразить содержимое, относящееся к “PSK 1”
пример Java из JSON-

 "line": "one",
        "type": 1,
        "v": "string",
        "min": 0,
        "max": 511,
        "value": "fnc=xml;url=https://usea.dm.sdg.teams.microsoft.com/device/logout.php/mmiiaacc/007686ce82361728055596pI6ZuvWzqw80xZNnNw9z/lang_en/;vid=n;nme=Sign Out",
        "name": "PSK 1",
        "index": 6097,
        "tab": 6

URL в “value” это то, что я пытаюсь получить.

Ответ или решение

Чтобы решить проблему с ошибкой "Подключение было закрыто", возникающей при выполнении команд Invoke-WebRequest и Invoke-RestMethod, необходимо рассмотреть несколько аспектов, которые могут вызвать это поведение. Приведенные вами команды PowerShell предназначены для отправки HTTP-запросов к веб-интерфейсу Cisco и получения JSON-данных.

Возможные причины проблемы и решения

  1. Проблемы с сертификатом SSL:
    Убедитесь, что ваше окружение позволяет игнорировать проверки SSL (что вы уже сделали с помощью ServerCertificateValidationCallback = { $true }). Но это не всегда рекомендуется из соображений безопасности.

  2. Протокол безопасности:
    Вы уже установили параметры для использования TLS 1.0, 1.1 и 1.2. Убедитесь, что ваш сервер поддерживает эти протоколы. Если сервер поддерживает только более новые версии TLS (например, TLS 1.2), вам нужно убедиться, что это правильно настроено. В PowerShell вы можете попробовать следующее:

  3. Файрвол и сетевые настройки:
    Убедитесь, что ваш клиент может достучаться до IP-адреса 10.45.210.143 и порт, используемый для HTTPS (обычно 443), не заблокирован. Это можно проверить с помощью команды Test-NetConnection:

    Test-NetConnection -ComputerName 10.45.210.143 -Port 443
  4. Проверка доступности URL:
    Откройте веб-браузер и попробуйте получить доступ к URL https://10.45.210.143/admin/advanced/Phone.json?request. Это поможет убедиться, что URL доступен и никаких дополнительных аутентификаций не требуется.

  5. Логи и дополнительные сведения:
    Проверяйте логи на самом устройстве Cisco на наличие сообщений об ошибках или предупреждений, связанных с посылаемыми запросами. Иногда настройки на устройстве могут блокировать запросы с определенными заголовками или параметрами.

Извлечение значения PSK 1

После исправления ошибок соединения, ваш скрипт должен работать корректно. Чтобы извлечь значение из JSON и получить URL, который находится в value, можете использовать следующий подход:

# Устанавливаем протоколы безопасности
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = { $true }
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

# Запрос данных
$url = 'https://10.45.210.143/admin/advanced/Phone.json?request'
$jsonData = Invoke-RestMethod -Uri $url -Method GET -UseBasicParsing

# Находим значение "PSK 1"
$psk1Entry = $jsonData | Where-Object { $_.name -eq "PSK 1" }

# Проверяем, найдено ли значение
if ($psk1Entry) {
    $urlValue = $psk1Entry.value
    Write-Host "Содержимое для 'PSK 1': $urlValue"

    # Дополнительно можете извлечь URL из значения, если это необходимо
    $parsedUrl = $urlValue -replace "fnc=xml;url=", "" # пример извлечения URL
    Write-Host "Извлеченный URL: $parsedUrl"
} else {
    Write-Host "Не найдено значение для 'PSK 1'."
}

Заключение

После внесения указанных изменений в код и проверок соединения, ваше приложение должно работать корректно и возвращать необходимую информацию из JSON-ответа. Если проблема сохраняется, возможно, потребуется дополнительная диагностика на уровне сетевой инфраструктуры или индивидуальные настройки веб-интерфейса Cisco.

Оцените материал
Добавить комментарий

Капча загружается...