Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Класс WebRequest в Powershell (http://forum.oszone.net/showthread.php?t=343646)

Uragan66 13-01-2020 16:48 2904760

Класс WebRequest в Powershell
 
Добрый день всем!
Есть текстовый файл со ссылками. Необходимо проверить доступность серверов по ним. В ответе достаточно простого 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 возникают те же ошибки. Другие методы неприменимы в данном случае, так как по некоторым ссылкам, вместо ответа, идёт скачивание потока.

DJ Mogarych 13-01-2020 20:24 2904805

С первым вариантом, скорее всего, надо указывать -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

Uragan66 13-01-2020 23:34 2904821

DJ Mogarych, спасибо большое!
Но, к сожалению, по Вашему варианту на udpxy потоках, типа:
Код:

http://2.62.216.214:1234/udp/225.54.203.1:5000
вместо ответа идёт скачивание потока.
Цитата:

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

хотел указать, но не могу найти информации как правильно указать этот параметр...

DJ Mogarych 14-01-2020 08:44 2904840

Добавьте
Код:

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

Цитата:

Цитата Uragan66
не могу найти информации как правильно указать этот параметр »

https://stackoverflow.com/a/27951845

Uragan66 14-01-2020 10:53 2904854

Цитата:

Цитата DJ Mogarych
Идёт скачивание потока, но потом выдаётся результат »

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


Время: 23:29.

Время: 23:29.
© OSzone.net 2001-