Il server utilizza l'autenticazione di base HTTP o qualche altro tipo? Se si sta utilizzando HTTP basic, è possibile impostare la proprietà Credentials
sulla richiesta Web su una credenziale contenente il nome utente e la password corretti e impostare la proprietà PreAuthenticate
su true.
Ecco un esempio (è non testato, in modo da utilizzare solo come una linea guida):
var uri = new Uri("https://somesite.com/something");
var request = WebRequest.Create(uri) as HttpWebRequest;
request.Credentials = new NetworkCredential("myUserName","myPassword");
request.PreAuthenticate = true;
var response = request.GetResponse();
Nota: Nella mia esperienza questo modo, c'è qualche comportamento strano nel framework .NET. Si potrebbe pensare che dovrebbe fare quello che dice il codice, ma in realtà fa questo: richiesta
- Invia al server senza credenziali
- server risponde con 401
- Re-Invia richiesta con le credenziali hai dato it
- Il server accetta la richiesta.
Non ho idea del motivo per cui lo farebbe, poiché sembra rotto, quindi forse è stato un capriccio della mia macchina e forse non succederà a voi.
Se la tua app non è sensibile alle prestazioni e le tue richieste non sono POSTI di grandi quantità, probabilmente non te ne accorgi, ma per aggirarlo, ho dovuto creare manualmente l'intestazione di autenticazione di base HTTP e impostarla su il HttpWebRequest
manualmente manipolando la raccolta Headers
.
fonte
2009-06-03 21:00:37
Credo che il comportamento che descrivi sia lo stesso comportamento mostrato da wget in * nix. Si tenta una volta e fallisce e quindi invia le credenziali e ci riesce. – Stephan
Penso che questa sia una specie di sequenza di richiesta di sfida che fa parte della specifica http. – MGOwen