Разница между WebClient / WebRequest и HttpClient в AppDomain? - PullRequest
0 голосов
/ 08 ноября 2018

В Windows PowerShell я использую следующий код в своем профиле, чтобы заставить все командлеты использовать мой прокси (например, Update-Help и т. Д.):

using namespace System.Net
using namespace System.Security.Principal

$isAdmin = ([WindowsPrincipal][WindowsIdentity]::GetCurrent()).IsInRole([WindowsBuiltInRole]::Administrator)
if ($isAdmin)
{
    [WebRequest]::DefaultWebProxy = [WebProxy]::new('http://proxy:port')
    [WebRequest]::DefaultWebProxy.Credentials = [CredentialCache]::DefaultNetworkCredentials
}

$wc = [WebClient]::new()
$wc.Proxy.Credentials = [CredentialCache]::DefaultNetworkCredentials

У меня есть дополнительный код для обработки сертификатов / SSL:

@([Enum]::GetValues([SecurityProtocolType])).
    Where{$PSItem -gt [Math]::Max(
            [ServicePointManager]::SecurityProtocol.value__,
            [SecurityProtocolType]::Tls.value__
    )}.
    ForEach{[ServicePointManager]::SecurityProtocol = [ServicePointManager]::SecurityProtocol -bor $PSItem}

[ServicePointManager]::ServerCertificateValidationCallback = {$true}

Это работает, однако, документация msdn рекомендует вместо этого перейти на System.Net.Http.HttpClient, поэтому я попытался реализовать там те же самые идеи:

using namespace System.Net
using namespace System.Security.Authentication

Add-Type -AssemblyName System.Net.Http, System.Net.Http.WebRequest

$handler = [System.Net.Http.WebRequestHandler]::new()
$handler.UseDefaultCredentials = $true
$handler.DefaultProxyCredentials = [CredentialCache]::DefaultNetworkCredentials
$handler.SslProtocols = [SslProtocols]::Tls12
$handler.ServerCertificateValidationCallback = {$true}

$http = [System.Net.Http.HttpClient]::new($handler, $true)

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

...