Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Класс WebRequest в Powershell

Ответить
Настройки темы
PowerShell - Класс WebRequest в Powershell

Старожил


Сообщения: 216
Благодарности: 15

Профиль | Отправить PM | Цитировать


Добрый день всем!
Есть текстовый файл со ссылками. Необходимо проверить доступность серверов по ним. В ответе достаточно простого StatusCode, поэтому применил, вроде самый быстрый способ проверки, посредством NET класса WebRequest:
Код: Выделить весь код
$url = 'http://5.28.31.65:4022/udp/232.1.19.6:1235'
$a = ([System.Net.WebRequest]::Create($url)).GetResponse()
$a.StatusCode
Ссылки могут быть на разные типы серверов. Пример ссылок:
Код: Выделить весь код
http://tviptv.iptv-channel.ru:8000/streaming/clients_live.php?extension=m3u8&username=valerikmosoyan@gmail.com&password=89183640164&stream=17&type=hls&playlist.m3u8
http://mu01.v5iptv.com:8880/BL12MA000587/91417327/2985
http://5.28.31.65:4022/udp/232.1.19.6:1235
http://37.49.181.239:4022/udp/238.1.1.1:1234
http://193.201.98.123:7000/play/a02p
По большинству ссылок, если сервер доступен, ответ будет "ОК"
Но есть некоторые сервера, которые прерывают подключение. К примеру по этой ссылке:
Код: Выделить весь код
http://heraiptv.vip:25461/QOPuVsib0M/mXi8xlbXG7/3689
сервер отдаёт:
Код: Выделить весь код
Exception calling "GetResponse" with "0" argument(s): "Удаленный сервер возвратил ошибку: (401) Несанкционированный."
At I:\Проекты\Cecker\Untitled266.ps1:2 char:1
+ $a = ([System.Net.WebRequest]::Create($url)).GetResponse()
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : WebException
Или по такой ссылке:
Код: Выделить весь код
ttp://2.62.216.214:1234/udp/225.54.203.1:5000
ошибка:
Код: Выделить весь код
Exception calling "GetResponse" with "0" argument(s): "Сервер нарушил протокол. Section=ResponseStatusLine"
At I:\Проекты\Cecker\Untitled266.ps1:2 char:1
+ $a = ([System.Net.WebRequest]::Create($url)).GetResponse()
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : WebException
Может кто сталкивался с использованием WebRequest в коде Powershell, подскажите, пожалуйста, можно ли добавить к запросу какие параметры, чтобы обойти такие ошибки серверов ?
При использовании командлета Invoke-WebRequest с методом HEAD возникают те же ошибки. Другие методы неприменимы в данном случае, так как по некоторым ссылкам, вместо ответа, идёт скачивание потока.

Отправлено: 16:48, 13-01-2020

 

Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6484
Благодарности: 1463

Профиль | Отправить PM | Цитировать


С первым вариантом, скорее всего, надо указывать -Credentials

Второй вариант
Код: Выделить весь код
function Set-UseUnsafeHeaderParsing
{
    param(
        [Parameter(Mandatory,ParameterSetName='Enable')]
        [switch]$Enable,

        [Parameter(Mandatory,ParameterSetName='Disable')]
        [switch]$Disable
    )

    $ShouldEnable = $PSCmdlet.ParameterSetName -eq 'Enable'

    $netAssembly = [Reflection.Assembly]::GetAssembly([System.Net.Configuration.SettingsSection])

    if($netAssembly)
    {
        $bindingFlags = [Reflection.BindingFlags] 'Static,GetProperty,NonPublic'
        $settingsType = $netAssembly.GetType('System.Net.Configuration.SettingsSectionInternal')

        $instance = $settingsType.InvokeMember('Section', $bindingFlags, $null, $null, @())

        if($instance)
        {
            $bindingFlags = 'NonPublic','Instance'
            $useUnsafeHeaderParsingField = $settingsType.GetField('useUnsafeHeaderParsing', $bindingFlags)

            if($useUnsafeHeaderParsingField)
            {
              $useUnsafeHeaderParsingField.SetValue($instance, $ShouldEnable)
            }
        }
    }
}
Set-UseUnsafeHeaderParsing -Enable
(Invoke-WebRequest 'http://2.62.216.214:1234/udp/225.54.203.1:5000').StatusDescription
https://stackoverflow.com/a/35260673

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:24, 13-01-2020 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 216
Благодарности: 15

Профиль | Отправить PM | Цитировать


DJ Mogarych, спасибо большое!
Но, к сожалению, по Вашему варианту на udpxy потоках, типа:
Код: Выделить весь код
http://2.62.216.214:1234/udp/225.54.203.1:5000
вместо ответа идёт скачивание потока.
Цитата DJ Mogarych:
С первым вариантом, скорее всего, надо указывать -Credentials »
хотел указать, но не могу найти информации как правильно указать этот параметр...

Отправлено: 23:34, 13-01-2020 | #3


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6484
Благодарности: 1463

Профиль | Отправить PM | Цитировать


Добавьте
Код: Выделить весь код
-TimeoutSec 3
Идёт скачивание потока, но потом выдаётся результат.

Цитата Uragan66:
не могу найти информации как правильно указать этот параметр »
https://stackoverflow.com/a/27951845

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

Это сообщение посчитали полезным следующие участники:

Отправлено: 08:44, 14-01-2020 | #4


Старожил


Сообщения: 216
Благодарности: 15

Профиль | Отправить PM | Цитировать


Цитата DJ Mogarych:
Идёт скачивание потока, но потом выдаётся результат »
таки да... Спасибо большое!
Хотя по такому методу очень увеличивается время ответа, что при 10-20 линках несущественно, а когда их больше 1000, то да...
Придётся добавлять условие для отбора таких ссылок.
А с -Credentials в данном случае ничего не получится, требуется указание учётных данных, а где их взять то...

Отправлено: 10:53, 14-01-2020 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Класс WebRequest в Powershell

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
PowerShell - [блог] Игнорирование проверки сертификата для Invoke-WebRequest/Invoke-RestMethod Kazun Скриптовые языки администрирования Windows 0 07-09-2017 05:30
PowerShell - Invoke-WebRequest NoProxy Elven Скриптовые языки администрирования Windows 2 18-05-2017 16:43
PowerShell - [блог] Отправка Post запроса используя Invoke-WebRequest Kazun Скриптовые языки администрирования Windows 0 04-09-2016 16:30
C/C++ - Реализовать класс Goods и класс Money lixod96 Программирование и базы данных 1 15-10-2014 12:14
C/C++ - класс вектор root_777 Программирование и базы данных 8 12-12-2007 00:40




 
Переход