System.Net.WebClient 클래스를 사용할 때 프록시 인증 오류 (HTTP 407 상태 코드)를 강력하게 처리하는 방법을 알아 내려고하고 있습니다.System.Net.WebClient 대 프록시 인증 407 오류
이 필드에서는 많은 사용자가 4035 프록시 인증 WebException을 수신하는 것으로 나타 났지만 좋은 기본 전략이 무엇인지 잘 모르겠습니다. .Net 2.0/3.5에서 프록시 인증 설정은 Internet Explorer 시스템 설정에서 상속 된 것으로 간주됩니다. Firefox, Opera 및 Chrome은 동일한 설정을 사용합니다.
가 여기에 우리가 사용하는 기본 코드입니다 :이 코드가 실패하면
using System.Net;
string url = "http://www.mysite.com";
WebClient webClient = new WebClient();
byte[] data = webClient.DownloadFile(url);
, 우리는 사용자의 브라우저를 열고 도움말 페이지로 보냅니다. 웹 로그를 통해이 고객이 브라우저 에 성공적으로 연결할 수 있음을 알게되었습니다. Google 도움말 페이지를보기 전에 수동으로 프록시 사용자 이름과 비밀번호를 입력하는 것일 수도 있습니다. 우리는 모른다.
WebClient.UseDefaultCredentials를 사용할 수있는 것처럼 보이지만 WebClient가 시스템 설정을 사용하는 경우이 은 중복 된 것처럼 보입니다.
도움을 주시면 감사하겠습니다.
감사합니다. Eric. 피들러는 잘 작동합니다. Negotiate/NTML에 대해 설명하기 위해 UseDefaultCredentials = true로 설정했는지 여부에 관계없이 WebClient에서 기본 자격 증명을 제공합니까? 즉, 407 WebException을 처리하고 UseDefaultCredentials = true를 사용하여 다시 시도 할 때 가치가 있습니까? 왜 항상 UseDefaultCredentials = true를 설정하지 않는가? 보안 위험? 의견 면책 조항 : WinInet이이 점을 훨씬 능가하는 것으로 보입니다. 우주의 모든 사람들이 프록시를 통과하기를 원한다면 자동으로이 작업을 수행하거나 이벤트를 실행하고 자격 증명을 입력/저장하기위한 표준 UI를 제공하는 것이 어떻겠습니까? – Daniel
나는 Fiddler와 함께 더 많은 것을 실험했다. 나는 아래와 같이 사용자 이름과 암호 ("1", "1")를 제공하는 것이 쉬울 것이라고 생각했지만 작동하지 않습니다. string url = "http://www.java.com/"; webClient = new WebClient(); CredentialCache cache = new CredentialCache(); cache.Add (새 Uri (url), "Basic", 새 NetworkCredential ("1", "1")); webClient.Proxy.Credentials = credentialCache; webClient.Credentials = credentialCache; 문자열 내용 = webClient.DownloadString (url); – Daniel
제대로 작동합니다. 어떤 이유로 CredentialCache가 작동하지 않습니다. webClient.Proxy.Credentials에 NetworkCredential을 전달해야했습니다. – Daniel