2011-12-27 4 views
7

Ho bisogno di inviare un HttpWebRequest a un URL con le credenziali in linea di base come segue:Creare un HttpWebRequest per un http: // utente: password @ doamin/interrogazione URL

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

Ho provato a installare l'URL come è, ma non sembrava passare le credenziali (ottenuto 403).
provato impostando la proprietà Credenziali di HttpWebRequest:

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

e rimuovendole dal url (con conseguente http://domain/query), ma ancora ottenuto lo stesso risultato (403).

L'utilizzo dell'URL direttamente da qualsiasi browser è riuscito in modo che le credenziali siano corrette.

Cosa mi manca?

[AGGIORNAMENTO - RISPOSTA]
Ecco il codice che ha funzionato per me:

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

risposta

1

Prima di creare la vostra classe creds:

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

Aggiungilo tua creds cache:

CredentialCache credsCache = new CredentialCache(); 

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

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

Quindi impostare t he wr.Credentials al credsCache

+0

Ho provato il codice suggerito, ma non ha funzionato. Osservando la richiesta con Fiddler, non vedo le credenziali inviate ... – sternr

+0

Nota interessante, l'Uri che creo usa la seguente struttura: "http://www.dominio.com", cercando di creare un Uri senza http: // prefisso non riuscito – sternr

0

La password di testo semplice non è più una parte valida dell'URL (in base al rispettivo RFC). Dovresti utilizzare NetworkCredentials come hai già provato. Vedere 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. Rispetto allo snippet di codice MSDN, è necessario prefisso le stringhe con "http: //" per evitare l'eccezione "URI non valido".

+0

Ciò genera un'eccezione URI BAD. –

+1

Aggiungi '" http: // 'come nella risposta aggiornata. –

Problemi correlati