Próbuję dowiedzieć się, jak skutecznie obsługiwać błędy uwierzytelniania proxy (HTTP 407 kod stanu) podczas korzystania z klasy System.Net.WebClient.Błąd System.Net.WebClient vs. Proxy Authentication 407
W terenie widzimy wielu użytkowników otrzymujących uwierzytelnienie proxy 402 w standardzie WebException, ale nie jestem pewien, jaka jest dobra strategia domyślna. W .Net 2.0/3.5 ustawienia autoryzacji proxy mają być dziedziczone po ustawieniach systemu Internet Explorer. Firefox, Opera i Chrome korzystają z tych samych ustawień, co .
Oto kod podstawowy używamy:
using System.Net;
string url = "http://www.mysite.com";
WebClient webClient = new WebClient();
byte[] data = webClient.DownloadFile(url);
Gdy ten kod nie powiedzie, otwieramy przeglądarkę użytkownika i przesyła je do pomocy stronie. Z naszych dzienników internetowych wiemy, że ci klienci mogą z powodzeniem łączyć się w swoich przeglądarkach pod numerem . Być może ręcznie wprowadzają swoją nazwę użytkownika proxy i hasło zanim przejdą na naszą stronę pomocy? Nie wiemy.
Wygląda na to, że możemy użyć WebClient.UseDefaultCredentials, ale ten wydaje się zbędny, jeśli WebClient i tak używa ustawień systemowych.
Każda pomoc jest doceniana.
Dzięki Eric. Fiddler działa dobrze. Aby wyjaśnić, dla Negotiate/NTML, domyślne poświadczenia będą dostarczane przez WebClient niezależnie od tego, czy ustawię UseDefaultCredentials = true? Innymi słowy, czy istnieje wartość w obsłudze 407 wyjątku WebException i ponownej próbie z UseDefaultCredentials = true? Dlaczego po prostu nie zawsze ustawić UseDefaultCredentials = true? Zagrożenie dla bezpieczeństwa? Opinia Oświadczenie: Wydaje się, że WinInet radzi sobie z tym znacznie lepiej. Biorąc pod uwagę, że wszyscy we wszechświecie chcą przemierzać serwery proxy, dlaczego nie zrobić tego automatycznie lub nie wystrzelić zdarzenia i zapewnić standardowy interfejs do wprowadzania/zapisywania danych uwierzytelniających? – Daniel
Bardziej eksperymentowałem z Fiddler. Myślałem, że łatwo będzie podać nazwę użytkownika i hasło ("1", "1") jak poniżej, ale to nie działa. string url = "http://www.java.com/"; webClient = new WebClient(); Pamięć podręczna CredentialCache = new CredentialCache(); cache.Add (nowe Uri (url), "Basic", new NetworkCredential ("1", "1")); webClient.Proxy.Credentials = credentialCache; webClient.Credentials = credentialCache; treść ciągu = webClient.DownloadString (url); – Daniel
Gotowy do pracy. Z jakiegoś powodu CredentialCache nie działał. Musiałem przekazać NetworkCredential do webClient.Proxy.Credentials. – Daniel