亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在發出 HTTP 請求時,Go 是否有某種方式使用 DefaultNetworkCredenti

在發出 HTTP 請求時,Go 是否有某種方式使用 DefaultNetworkCredenti

Go
瀟瀟雨雨 2022-07-11 15:09:45
我正在編寫一個簡單的 Go 實用程序,該實用程序向 Internet 發出一些 POST 請求,但我需要通過代理并在不知道用戶憑據的情況下使用 NTLM。我見過如下 CSharp 代碼:wc = new CookieWebClient();wc.UseDefaultCredentials = true;wc.Proxy = WebRequest.DefaultWebProxy;wc.Proxy.Credentials = CredentialCache.DefaultNetworkCredentials;在 Go 中,我設法確定了系統代理,感覺就像是 hack: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 配置解決方案。我希望這盡可能動態。如果 CSharp 能做到,為什么 Go 不能呢?
查看完整描述

1 回答

?
寶慕林4294392

TA貢獻2021條經驗 獲得超8個贊

我被告知我可以使用 WinHTTP 或 WinInet 來實現這一點。我將使用golang.org/x/sys/windows包并從 DLL 中調用程序。或者,有人告訴我,我可以github.com/go-ole/go-ole通過 COM 對象使用和使用 WinHTTP,就像在另一個 SO 問題中一樣:Windows system credentials in Go HTTP NTLM requests。

更新:我最終決定選擇 WinInet,并創建了自己的包 (gitlab.com/mjwhitta/win/wininet),其中包含一個 http.Client,可用于發出 GET 和 POST 請求。有關如何使用它的示例,請參閱自述文件。如果我有需要,我可能會在未來擴展它。歡迎請求請求。

最后更新:男孩,我覺得自己很愚蠢。WinInet 不希望為你做 NTLM ......所以我將它移植到 WinHttp (gitlab.com/mjwhitta/win/winhttp)。


查看完整回答
反對 回復 2022-07-11
  • 1 回答
  • 0 關注
  • 137 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號