Domanda

Sto cercando di capire come gestire in modo efficace gli errori di autenticazione proxy (HTTP 407 codice di stato) quando si utilizza la classe System.Net.WebClient.

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 li usano 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 fallisce, apriamo il browser dell'utente e li inviamo a una guida pagina. Dai nostri log web, sappiamo che questi clienti possono connettersi con successo i loro browser. Forse stanno inserendo manualmente il loro nome utente proxy e password prima che arrivino alla nostra pagina di aiuto? Non lo sappiamo.

Sembra che potremmo usare WebClient.UseDefaultCredentials, ma questo sembra ridondante se WebClient utilizza comunque le impostazioni di sistema.

Qualsiasi aiuto è apprezzato.

È stato utile?

Soluzione

Internet Explorer non memorizza permanentemente nella cache / riutilizza le credenziali di autenticazione proxy se l'autenticazione proxy utilizza BASIC o DIGEST. Per Negozia / NTLM, verranno fornite le credenziali predefinite.

Quindi, anche se .NET eredita dalle impostazioni di IE, non otterrai alcuna "quotazione" gratuita. supporto per l'autenticazione proxy per Basic / Digest a meno che tu non stia eseguendo IE; dovrai richiedere all'utente o fornire una schermata di configurazione.

Fiddler (www.fiddler2.com) ha il "Request Authentication Proxy" " dal menu Regole che è possibile utilizzare per simulare questo scenario per il test.

Altri suggerimenti

Abbiamo risolto il problema aggiungendo una finestra di dialogo di configurazione che consente all'utente di scegliere " usa proxy " ;. Se questa impostazione viene eseguita, utilizziamo questi parametri (indirizzo, credenziali ...). In caso contrario, supponiamo che sia possibile stabilire una connessione senza alcuna interazione manuale. In caso di errore facciamo: a.) riprovare utilizzando le credenziali predefinite b.) pop-up di informazioni che un'impostazione in config potrebbe aiutare ...

Se l'autenticazione proxy viene eseguita tramite " credenziali predefinite " (Utente Windows) IE reagisce anche a un errore di autenticazione e invia credenziali predefinite in questo caso. Se questo non funziona, apre una finestra di dialogo delle credenziali. Non sono sicuro che tutti i browser gestiscano in questo modo - ma puoi semplicemente provarlo usando il violinista, in modo da poter vedere cosa sta succedendo.

So che questo è un vecchio post, ma ho avuto un problema simile nel tentativo di scaricare un file XML utilizzando WebClient in un'attività di script SSIS 2008R2 (SQL Server Integration Services) (codice VB.NET) tramite un server proxy in un sito remoto protetto tramite SSL che richiedeva anche l'autenticazione.

Ci è voluto un po 'per trovare una soluzione e questo post ha aiutato sul lato proxy. Di seguito è riportato il codice dello script che ha funzionato per me. Potrebbe essere utile a qualcuno che cerca simili.

    Dim objWebClient As WebClient = New WebClient()
    Dim objCache As New CredentialCache()

    'https://www.company.net/xxxx/resources/flt
    Dim strDownloadURL As String = Dts.Variables("FileURL").Value.ToString

    'apiaccount@company.net
    Dim strLogin As String = Dts.Variables("FileLogin").Value.ToString

    'sitepassword
    Dim strPass As String = Dts.Variables("FilePass").Value.ToString

    'itwsproxy.mycompany.com
    Dim strProxyURL As String = Dts.Variables("WebProxyURL").Value.ToString

    '8080
    Dim intProxyPort As Integer = Dts.Variables("WebProxyPort").Value

    'Set Proxy & Credentials as a Network Domain User acc to get through the Proxy
    Dim wp As WebProxy = New WebProxy(strProxyURL, intProxyPort)
    wp.Credentials = New NetworkCredential("userlogin", "password", "domain")
    objWebClient.Proxy = wp

    'Set the Credentials for the Remote Server not the Network Proxy
    objCache.Add(New Uri(strDownloadURL), "Basic", New NetworkCredential(strLogin, strPass))
    objWebClient.Credentials = objCache

    'Download file, use Flat File Connectionstring to save the file
    objWebClient.DownloadFile(strDownloadURL, Dts.Connections("XMLFile").ConnectionString)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top