0

インターネットに POST リクエストを送信する単純な Go ユーティリティを作成していますが、ユーザーの資格情報を知らなくてもプロキシを経由して NTLM を使用する必要があります。以下のような CSharp コードを見てきました。

wc = new CookieWebClient();
wc.UseDefaultCredentials = true;
wc.Proxy = WebRequest.DefaultWebProxy;
wc.Proxy.Credentials = CredentialCache.DefaultNetworkCredentials;

Go では、ハックのように感じられるシステム プロキシを特定することができました。

import (
    "net/http"
    "net/url"
    "strings"

    "golang.org/x/sys/windows/registry"
)

func getSystemProxy() func(req *http.Request) (*url.URL, error) {
    var e error
    var k registry.Key
    var proxy *url.URL
    var v string

    // Open the "Internet Settings" registry key
    k, e = registry.OpenKey(
        registry.CURRENT_USER,
        strings.Join(
            []string{
                "Software",
                "Microsoft",
                "Windows",
                "CurrentVersion",
                "Internet Settings",
            },
            "\\",
        ),
        registry.QUERY_VALUE,
    )
    if e != nil {
        return http.ProxyFromEnvironment
    }
    defer k.Close()

    // Read the "ProxyServer" value
    v, _, e = k.GetStringValue("ProxyServer")
    if (e != nil) || (v == "") {
        return http.ProxyFromEnvironment
    }

    // Get the http= portion and fix it up
    v = strings.Split(v, ";")[0]
    v = strings.Replace(v, "=", "://", 1)

    // Parse url
    if proxy, e = url.Parse(v); e != nil {
        return http.ProxyFromEnvironment
    }

    return http.ProxyURL(proxy)
}

CSharp のhttps://docs.microsoft.com/en-us/dotnet/api/system.net.credentialcache.defaultnetworkcredentials?view=netcore-3.1に相当する Go を見つけることができませんでした。https://github.com/Azure/go-ntlmsspを見つけましたが、ユーザーの資格情報をハードコーディングする必要がありますが、これは持っていません。ユーザーごとに新しいバイナリをコンパイルする必要があります。したくない。0 config ソリューションを探しています。これはできるだけ動的なものにしたいと思います。CSharp でできるのに、なぜ Go でできないのでしょうか?

どんな助けでも大歓迎です!

4

1 に答える 1