2017-03-15 15 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。 –

関連する問題