Я пишу простую утилиту Go, которая делает несколько POST-запросов в Интернет, но мне нужно пройти через прокси и использовать 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)
}
Мне не удалось найти Go-эквивалент https://docs.microsoft.com/en-us/dotnet/api/system.net.credentialcache.defaultnetworkcredentials?view=netcore-3.1. Я нашел https://github.com/Azure/go-ntlmssp, но для этого мне нужно чтобы жестко закодировать учетные данные пользователя, которых у меня нет, и мне нужно будет скомпилировать новый двоичный файл для каждого пользователя, чего я не хочу делать. Я ищу решение конфигурации 0. Я бы предпочел, чтобы это было как можно более динамичным. Если CSharp может это сделать, почему не может Go?
Любая помощь будет принята с благодарностью!