Sto cercando di capire come gestire in modo efficace gli errori di autenticazione proxy (codice di protezione HTTP 407) quando si utilizza la classe System.Net.WebClient.Errore System.Net.WebClient vs. proxy 407
Nel campo, vediamo molti utenti che ricevono un'autenticazione proxy 407 WebException, ma non sono sicuro di quale sia una buona strategia predefinita. In .Net 2.0/3.5, le impostazioni di autenticazione proxy dovrebbero essere ereditate da le impostazioni di sistema di Internet Explorer. Firefox, Opera e Chrome utilizzano queste stesse impostazioni .
Ecco il codice di base che stiamo usando:
using System.Net;
string url = "http://www.mysite.com";
WebClient webClient = new WebClient();
byte[] data = webClient.DownloadFile(url);
Quando questo codice viene a mancare, apriamo il browser dell'utente e li trasmetteremo un aiuto pagina. Dai nostri registri web, sappiamo che questi clienti possono connettersi con successo nei loro browser . Forse stanno inserendo manualmente il loro nome utente proxy e la password prima di arrivare alla nostra pagina di aiuto? Non lo sappiamo
Sembra che potremmo utilizzare WebClient.UseDefaultCredentials, ma questo sembra ridondante se WebClient utilizza comunque le impostazioni di sistema.
Qualsiasi aiuto è apprezzato.
Grazie Eric. Il violinista funziona bene. Per chiarire, per Negoziare/NTML, le credenziali predefinite verranno fornite da WebClient indipendentemente dal fatto che imposti UseDefaultCredentials = true? In altre parole, c'è un valore nella gestione di WebException 407 e riprovare con UseDefaultCredentials = true? Perché non impostare sempre UseDefaultCredentials = true? Rischio per la sicurezza? Opinion Disclaimer: WinInet sembrava gestire questo molto meglio. Dato che tutti nell'universo vogliono attraversare i proxy, perché non farlo automaticamente o attivare un evento e fornire un'interfaccia utente standard per l'inserimento/salvataggio delle credenziali? – Daniel
Ho sperimentato di più con Fiddler. Ho pensato che sarebbe stato semplice fornire il nome utente e la password ("1", "1") come sotto, ma non funziona. string url = "http://www.java.com/"; webClient = new WebClient(); CredentialCache cache = new CredentialCache(); cache.Add (nuovo Uri (url), "Base", nuovo NetworkCredential ("1", "1")); webClient.Proxy.Credentials = credentialCache; webClient.Credentials = credentialCache; string contents = webClient.DownloadString (url); – Daniel
Ha funzionato. Per qualche motivo, CredentialCache non ha funzionato. Ho dovuto passare un NetworkCredential a webClient.Proxy.Credentials. – Daniel