2017-03-15 62 views
1

我正在尋找使用調用該應用程序的Windows用戶的系統憑證在Go HTTP請求中執行NTLM身份驗證的阻力最小的路徑。Go HTTP NTLM請求中的Windows系統憑據

在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身份驗證和手動提供的用戶名/密碼,但這裏的目的是爲了避免不斷把這些英寸

回答

1

挖掘到它遠一點之後,它看起來像go-ole可以用來以與問題中的Python示例相同的方式使用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()) 
} 
+0

這麼醜。但它的作品! +1。 –