2011-12-27 6 views
7

Necesito enviar un HttpWebRequest a una URL con credenciales básicas en línea de la siguiente manera:Crear un HttpWebRequest para un http: // usuario: contraseña @ doamin/consulta URL

http://user:[email protected]/query 

He tratado de establecer la dirección URL como está, pero parece que no pasó las credenciales (obtuvo 403).
tratado de establecer la propiedad de Credenciales HttpWebRequest:

request.Credentials = new NetworkCredentials("username","pasword") 

Y sacándolos de la URL (que resulta en http://domain/query), pero todavía tiene el mismo resultado (403).

El uso de la URL directamente desde cualquier navegador se realizó correctamente, por lo que las credenciales son correctas.

¿Qué me estoy perdiendo?

[ACTUALIZACIÓN - RESPUESTA]
Aquí está el código que funcionó para mí:

string credentials = "username:password"; 
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(formattedUrl); 
request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes(credentials))); 
request.PreAuthenticate = true; 
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

Respuesta

1

En primer lugar se crea la clase creds:

NetworkCredential myCred = new NetworkCredential("username", "password"); 

Añádelo su Creds caché:

CredentialCache credsCache = new CredentialCache(); 

credsCache.Add(new Uri("www.foo.com"), "Basic", myCred); 

WebRequest wr = WebRequest.Create("www.foo.com"); 
wr.Credentials = credsCache; 

A continuación, configure t wr.Credentials to the credsCache

+0

Probé el código que sugirió, pero no funcionó. Mirando la solicitud con Fiddler, no veo los credenciales enviados ... – sternr

+0

Nota interesante, los Uri que creo utilizan la siguiente estructura: "http://www.domain.com", tratando de crear un Uri sin http: // prefix failed – sternr

0

La contraseña de texto simple ya no es una parte válida de la URL (de acuerdo con el respectivo RFC). Debería utilizar NetworkCredentials como ya lo intentó. Ver MSDN for code snippet/sample:

NetworkCredential myCred = new NetworkCredential(
    SecurelyStoredUserName,SecurelyStoredPassword,SecurelyStoredDomain); 

CredentialCache myCache = new CredentialCache(); 

myCache.Add(new Uri("http://www.contoso.com"), "Basic", myCred); 
myCache.Add(new Uri("http://app.contoso.com"), "Basic", myCred); 

WebRequest wr = WebRequest.Create("http://www.contoso.com"); 
wr.Credentials = myCache; 

UPD. En comparación con el fragmento de código de MSDN, es necesario prefijar las cadenas con "http: //" para evitar la excepción de "URI no válido".

+0

Esto arroja una MALA Excepción de URI. –

+1

Agregue '" http: // 'como respuesta actualizada. –

Cuestiones relacionadas