Question

J'essaie de comprendre comment gérer efficacement les erreurs d'authentification de proxy (HTTP Code d'état 407) lors de l'utilisation de la classe System.Net.WebClient.

Sur le terrain, de nombreux utilisateurs reçoivent une authentification proxy 407. WebException, mais je ne sais pas quelle est la bonne stratégie par défaut. En .Net 2.0 / 3.5, les paramètres d’authentification proxy sont supposés être hérités de les paramètres du système Internet Explorer. Firefox, Opera et Chrome utilisent ces mêmes paramètres.

Voici le code de base que nous utilisons:

using System.Net;

string url = "http://www.mysite.com";
WebClient webClient = new WebClient();
byte[] data = webClient.DownloadFile(url);

Lorsque ce code échoue, nous ouvrons le navigateur de l'utilisateur et les envoyons à une aide. page. Grâce à nos journaux Web, nous savons que ces clients peuvent se connecter avec succès leurs navigateurs. Peut-être qu’ils entrent manuellement leur nom d’utilisateur proxy et mot de passe avant d’atteindre notre page d’aide? Nous ne savons pas.

Il semble que nous pourrions utiliser WebClient.UseDefaultCredentials, mais ceci semble redondant si WebClient utilise malgré tout les paramètres système.

Toute aide est appréciée.

Était-ce utile?

La solution

Internet Explorer ne met pas en cache / réutilise de manière persistante les informations d’authentification du proxy si ce dernier utilise BASIC ou DIGEST. Pour Negotiate / NTLM, les informations d'identification par défaut seront fournies.

Par conséquent, même si .NET hérite des paramètres d'IE, vous ne recevrez aucun "gratuit". prise en charge de l'authentification proxy pour Basic / Digest, sauf si vous vous trouvez dans IE; vous devrez demander à l'utilisateur ou fournir un écran de configuration.

Fiddler (www.fiddler2.com) dispose de l'option "Demander l'authentification du proxy". option du menu Règles que vous pouvez utiliser pour simuler ce scénario à des fins de test.

Autres conseils

Nous avons résolu ce problème en ajoutant une boîte de dialogue de configuration permettant à l'utilisateur de choisir "utiliser un proxy". Si ce paramètre est défini, nous utilisons ces paramètres (adresse, identifiants, etc.) Dans le cas contraire, nous supposons qu'une connexion peut être établie sans aucune interaction manuelle. En cas d'erreur, nous faisons: a.) réessayez avec les identifiants par défaut b.) popup une information qu'une configuration dans config pourrait aider ...

Si l'authentification du proxy est effectuée à l'aide de " informations d'identification par défaut " (Utilisateur Windows) IE réagit également à une erreur d'authentification et envoie les informations d'identification par défaut dans ce cas. Si cela ne fonctionne pas, une boîte de dialogue d'informations d'identification s'ouvre. Je ne sais pas si tous les navigateurs traitent cela de cette façon, mais vous pouvez simplement essayer en utilisant un violoneur afin de voir ce qui se passe.

Je sais qu'il s'agit d'un ancien message mais j'ai eu un problème similaire lors de la tentative de téléchargement d'un fichier XML à l'aide de WebClient dans une tâche de script SSIS 2008R2 (code VB.NET Services) via un serveur proxy sur un site distant. sécurisé via SSL nécessitant également une authentification.

Il a fallu un certain temps pour trouver une solution et cet article a été utile du côté des mandataires. Vous trouverez ci-dessous le code de script qui a fonctionné pour moi. Pourrait être utile à quelqu'un qui recherche un produit similaire.

    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)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top