簡體   English   中英

在 .NET Core 中獲取系統默認 Web 代理

[英]Get system default web proxy in .NET Core

以下代碼采用目標 uri 並將其內容作為流獲取。 在進行網絡調用之前,它會檢查是否需要代理才能訪問目標 uri。

這非常適用於全框架(即 v4.8)中的 .NET 應用程序:

    var targetUri = new Uri("...");
    HttpClient client;

    // get the system default web proxy ...
    var proxyUri = WebRequest.DefaultWebProxy.GetProxy(targetUri);

    // ... and check whether it should be used or not
    var proxyAuthorityEqualsTargetAuthority = proxyUri?.Authority?.Equals(targetUri.Authority) == true;
    var proxyRequired = !proxyAuthorityEqualsTargetAuthority;

    if (proxyRequired)
    {
        var proxy = new WebProxy()
        {
            Address = proxyUri,
            BypassProxyOnLocal = false,
            UseDefaultCredentials = true
        };

        var httpClientHandler = new HttpClientHandler { Proxy = proxy };
        client = new HttpClient(handler: httpClientHandler, disposeHandler: true);
    }
    else
    {
        client = new HttpClient();
    }

    await client.GetStreamAsync(targetUri) ... 

但是它在 .NET Core 應用程序中不起作用:

訪問WebRequest.DefaultWebProxy.GetProxy(targetUri)將拋出PlatformNotSupportedException

此平台不支持操作。

所以我嘗試了這一行,它也受 .NET Core 支持:

    // deprecated: var proxyUri = new Uri(WebRequest.DefaultWebProxy.GetProxy(targetUri).AbsoluteUri);
    var proxyUri = new WebProxy().GetProxy(targetUri);

然而,返回proxyUri.Authority不總是返回targetUri現在(兩者在.NET和.NET核心),而不是地址,如代理服務器WebRequest.DefaultWebProxy.GetProxy(targetUri)確實在.NET。

這樣, proxyAuthorityEqualsTargetAuthority始終為真,因此, proxyRequired始終為假。 直接訪問目標 uri 會拋出407 (Proxy Authentication Required)

有誰知道如何在 .NET Core 中獲取默認 Web 代理的地址?

好吧,我不知道我錯過了,因為我試過這個星期前。 我再次嘗試,一切似乎都很好。

使用CredentialCache.DefaultCredentials ,這個簡短的代碼適用於:.NET 和 .NET Core。

    var targetUri = new Uri("...");

    var handler = new HttpClientHandler();
    handler.DefaultProxyCredentials = CredentialCache.DefaultCredentials;
    var client = new HttpClient(handler, disposeHandler: true);

    await client.GetStreamAsync(targetUri) ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM