我正在寻找使用Windows用户调用应用程序的系统凭据在Go HTTP请求中进行NTLM身份验证的阻力最小的路径。
在C#/。NET中,我将能够通过
WebRequest request = WebRequest.Create(url); request.Credentials = CredentialCache.DefaultCredentials; WebResponse response = request.GetResponse(); Stream receiveStream = response.GetResponseStream();
在Python中,可以通过以下方式获得等效结果
import win32com.client h = win32com.client.Dispatch('WinHTTP.WinHTTPRequest.5.1') h.SetAutoLogonPolicy(0) h.Open('GET', url, False) h.Send()
但我无法找到有关如何在Go中执行相同操作的任何资源。我当然可以使用一个库进行NTLM身份验证,并手动提供用户名/密码,但是这里的目标是避免将它们输入。
在进一步深入研究之后,看起来go-ole可以像WinHTTPRequest问题中的Python示例一样被利用。忽略所有错误捕获,
go-ole
WinHTTPRequest
package main import ( "fmt" ole "github.com/go-ole/go-ole" "github.com/go-ole/go-ole/oleutil" ) func main() { ole.CoInitialize(0) defer ole.CoUninitialize() unknown, _ := oleutil.CreateObject("WinHTTP.WinHTTPRequest.5.1") request, _ := unknown.QueryInterface(ole.IID_IDispatch) oleutil.CallMethod(request, "SetAutoLogonPolicy", 0) oleutil.CallMethod(request, "Open", "GET", "http://example.com", false) oleutil.CallMethod(request, "Send") resp := oleutil.MustGetProperty(request, "ResponseText") fmt.Println(resp.ToString()) }