2009-11-05 9 views
25

Estoy tratando de obtener una fuente html de un sitio web a través del código C#. Cuando accedo al sitio con la autenticación de Windows el siguiente código funciona:Las credenciales de dominio para una clase de WebClient no funcionan

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()); 
       } 
      } 

cuando entro en mis credenciales de dominio manualmente me sale un mensaje de "no autenticado":

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()); 
       } 
      } 

¿Por qué es así?

Respuesta

52

Prueba esto:

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

obras, gracias, ninguna explicación? – agnieszka

+11

Debe especificar el tipo de autenticación. Cuando el servidor desafía al cliente con la autenticación NTLM, se llamará al método ICredentials.GetCredential en WebClient.Credentials con 'authType =" NTLM "'. Si usó 'WebClient.Credential = new NetworkCredential (...)' ya que no se especifica ningún tipo de autenticación, el cliente no podrá responder correctamente. 'CredentialCache' ya implementa esta funcionalidad. –

+1

¿Qué debo especificar en Uri? El recurso que trato de obtener es "https://myDomain.com/images/userName". ¿Puedes poner algún ejemplo en vivo sobre cómo deben verse Uri y NetworkCredentials? Thx –

Cuestiones relacionadas