2009-11-05 114 views
25

我試圖通過C#代碼獲取網站的html源代碼。當我使用Windows身份驗證訪問該網站下面的代碼工作:WebClient類的域憑據不起作用

using (WebClient client = new WebClient()) 
      { 
       client.Credentials = CredentialCache.DefaultCredentials; 
       using (Stream stream = client.OpenRead("http://intranet/")) 
       using (StreamReader reader = new StreamReader(stream)) 
       { 
        MessageBox.Show(reader.ReadToEnd()); 
       } 
      } 
當我手動輸入我的域名證書我得到一個「未」消息

using (WebClient client = new WebClient()) 
      { 
       NetworkCredential credentials = new NetworkCredential("username", "pass", "domain"); 
       client.Credentials = credentials; 
       using (Stream stream = client.OpenRead("http://intranet/")) 
       using (StreamReader reader = new StreamReader(stream)) 
       { 
        MessageBox.Show(reader.ReadToEnd()); 
       } 
      } 

爲什麼會這樣呢?

回答

52

試試這個:

CredentialCache cc = new CredentialCache(); 
cc.Add(
    new Uri("http://intranet/"), 
    "NTLM", 
    new NetworkCredential("username", "pass", "domain")); 
client.Credentials = cc; 
+2

作品,謝謝,任何解釋? – agnieszka 2009-11-05 14:25:03

+11

您需要指定認證類型。當服務器使用NTLM身份驗證挑戰客戶端時,將在具有'authType =「NTLM」'的WebClient.Credentials上調用ICredentials.GetCredential方法。如果您使用'WebClient.Credential = new NetworkCredential(...)'作爲沒有指定身份驗證類型,客戶端將無法正確響應。 'CredentialCache'已經實現了這個功能。 – 2009-11-05 14:57:53

+1

我應該在Uri中指定什麼?我試圖獲得的資源是「https://myDomain.com/images/userName」。你可以把任何現場示例如何Uri和NetworkCredentials應該看起來像? Thx – 2014-03-07 09:09:31