Frage

Ich versuche, wie robust, um herauszufinden, um die Proxy-Authentifizierung Fehler behandeln (HTTP 407-Statuscode), wenn die System.Net.WebClient-Klasse.

Im Bereich sehen wir viele Benutzer eine 407-Proxy-Authentifizierung empfangen WebException, aber ich bin nicht sicher, was eine gute Standardstrategie ist. in .Net 2.0 / 3.5 werden die Proxy-Authentifizierungseinstellungen soll von vererbt werden die Internet Explorer Systemeinstellungen. Firefox, Opera und Chrome verwenden diese gleiche Einstellungen.

Hier ist der grundlegende Code, den wir verwenden:

using System.Net;

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

Wenn dieser Code nicht, öffnen wir den Browser des Benutzers und an eine Hilfe schicken Seite. Von unseren Web-Logs, wissen wir, diese Kunden erfolgreich verbinden können in ihr Browser. Vielleicht werden sie ihre Proxy-Benutzernamen manuell eingeben und Passwort, bevor sie erhalten auf unsere Hilfe-Seite? Wir wissen es nicht.

Es scheint, dass wir WebClient.UseDefaultCredentials nutzen könnten, aber dies scheint, wenn WebClient redundant ist ohnehin die Systemeinstellungen.

Jede Hilfe ist willkommen.

War es hilfreich?

Lösung

Internet Explorer nicht dauerhaft cache / Wiederverwendung Proxy-Authentifizierungs-Credentials, wenn der Proxy Auth BASIC oder DIGEST verwendet. Für Verhandeln / NTLM, Standard-Anmeldeinformationen werden zur Verfügung gestellt werden.

Also, auch wenn .NET von IE-Einstellungen erbt, werden Sie keine „freie“ Unterstützung für Proxy-Authentifizierung für Basic / Digest bekommen, wenn Sie in IE passieren zu laufen; Sie werden dem Benutzer oder geben Sie einen Konfigurationsbildschirm aufzurufen müssen.

Fiddler (www.fiddler2.com) hat die „Request Proxy-Authentifizierung“ Option im Menü Rules, dass Sie dieses Szenario für den Test simulieren können.

Andere Tipps

Wir lösten das Problem, indem eine Config-Dialog hinzugefügt, die den Benutzer alows „Proxy verwenden“ zu wählen. Wenn diese Einstellung erfolgt ist verwenden wir diese Parameter (Adresse, Anmeldeinformationen ...). Wenn nicht - wir gehen davon aus, dass eine Verbindung ohne manuelle Interaktion erfolgen. Im Falle eines Fehlers wir tun: a.) versuchen Sie es erneut Standardanmeldeinformationen b.) Pop-up Informationen, dass eine Einstellung in der Konfigurations helfen könnte ...

Wenn die Proxy-Authentifizierung über „Standardanmeldeinformationen“ (Windows-Benutzer) IE reagiert auf einen Auth-Fehler auch gemacht wird, und sendet Standardanmeldeinformationen in diesem Fall. Wenn dies nicht funktioniert, öffnet sich ein Dialog Anmeldeinformationen. Ich bin mir nicht sicher, ob alle Browser diese auf diese Weise behandeln - aber man kann es einfach mal ausprobieren Fiedler verwenden, so können Sie sehen, was los ist

.

Ich weiß, das ist eine alte Post, aber ich hatte ein ähnliches Problem versuchen, eine XML-Datei in einer SSIS 2008R2 (SQL Server Integration Services) Skript-Task (VB.NET-Code) über einen Proxy-Server auf einen Remote-Standort mit WebClient zum Download SSL gesichert über die auch eine Authentifizierung erforderlich.

Es dauerte eine Weile, eine Lösung zu finden und dieser Beitrag half auf der Proxy-Seite. Unten ist der Script-Code, der für mich gearbeitet. Könnte für ähnlich wie jemand nützlich sein, zu suchen.

    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)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top