L'esecuzione del codice seguente:Passando nome utente e password per NET HttpWebRequest tramite URI non funziona
var request = HttpWebRequest.Create("http://username:[email protected]/test-http-status-codes.asp?code=401");
var response = request.GetResponse();
... e ispezionare la richiesta utilizzando Wireshark rivela che nessuna autorizzazione viene tentato dal mio cliente (l'url è un servizio semplice che restituirà sempre 401).
Questo codice invia un'intestazione di autorizzazione dopo la sfida iniziale:
var request = HttpWebRequest.Create("http://username:[email protected]/test-http-status-codes.asp?code=401");
request.Credentials = new NetworkCredential("username", "password");
var response = request.GetResponse();
Uso della classe System.Uri
non ha alcun effetto. Perché il nome utente e la password sono passati nell'URL non utilizzati per l'autenticazione?
(io sappia this blog post sul passare l'intestazione di autorizzazione senza una sfida iniziale, ma che non è il problema a portata di mano)
EDIT Dovrei aggiungere che è abbastanza facile da aggirare questa limitazione , ad esempio con questo pezzo di codice (add url non-fuga a piacere), io sono solo curioso di sapere perché si deve fare questo:
var userInfo = request.Address.UserInfo;
if (!string.IsNullOrEmpty(userInfo) && userInfo.Contains(':'))
{
request.Credentials = new NetworkCredential(userInfo.Split(':').First(), userInfo.Split(':').Last());
}
Sì, Ho un po 'di codice simile - non capisco perché HttpWebRequest lo ignori ... – friism
Penso che sia un problema di sicurezza. Molti browser ora ignorano anche questo: http://support.microsoft.com/kb/834489 Dovrei tornare a guardare le versioni .NET precedenti per vedere se è mai stato codificato per usarlo, ma non è esplicitamente in 4.0 –