문제

System.net.webclient 클래스를 사용할 때 프록시 인증 오류 (HTTP 407 상태 코드)를 강력하게 처리하는 방법을 알아 내려고합니다.

이 분야에서 우리는 많은 사용자들이 407 프록시 인증 웹 렉스 션을받는 것을 볼 수 있지만, 좋은 기본 전략이 무엇인지 잘 모르겠습니다. .NET 2.0/3.5에서 프록시 인증 설정은 인터넷 익스플로러 시스템 설정에서 상속되어야합니다. Firefox, Opera 및 Chrome 도이 동일한 설정을 사용합니다.

우리가 사용하는 기본 코드는 다음과 같습니다.

using System.Net;

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

이 코드가 실패하면 사용자의 브라우저를 열고 도움말 페이지로 보냅니다. 웹 로그에서 이러한 고객이 브라우저에 성공적으로 연결할 수 있다는 것을 알고 있습니다. 아마도 우리의 도움말 페이지에 도착하기 전에 프록시 사용자 이름과 비밀번호를 수동으로 입력하고 있습니까? 우리는 모른다.

WebClient.usedeFaultCredentials를 사용할 수 있지만 WebClient가 시스템 설정을 사용하는 경우 중복되는 것 같습니다.

모든 도움이 감사합니다.

도움이 되었습니까?

해결책

Proxy Auth가 Basic 또는 Digest를 사용하는 경우 Internet Explorer는 캐시/재사용 프록시 인증 자격 증명을 지속적으로하지 않습니다. 협상/NTLM의 경우 기본 자격 증명이 제공됩니다.

따라서 .NET가 IE 설정에서 상속 되더라도 IE에서 실행되지 않는 한 기본/다이제스트에 대한 프록시 인증에 대한 "무료"지원을받지 못합니다. 사용자에게 프롬프트하거나 구성 화면을 제공해야합니다.

Fiddler (www.fiddler2.com)에는이 시나리오를 테스트하기 위해 사용할 수있는 규칙 메뉴에 "요청 프록시 인증"옵션이 있습니다.

다른 팁

우리는 사용자가 "프록시 사용"을 선택할 수 있도록 구성 대화 상자를 추가하여 해당 문제를 해결했습니다. 이 설정이 완료되면이 매개 변수 (주소, 자격 증명 ...)를 사용합니다. 그렇지 않은 경우 - 우리는 수동 상호 작용없이 연결을 만들 수 있다고 가정합니다. 오류의 경우 : a.) 기본 자격 증명을 사용하여 다시 시도 b.) 구성의 설정이 도움이 될 수있는 정보를 팝업하십시오 ...

"기본 자격 증명"(Windows User)을 통해 프록시 인증이 수행되면 IE도 인증 오류에 반응 하고이 경우 기본 자격 증명을 보냅니다. 이것이 작동하지 않으면 자격 증명 대화 상자가 엽니 다. 모든 브라우저가 이런 식으로 처리하는지 확실하지 않지만 Fiddler를 사용하여 시도해 볼 수 있으므로 무슨 일이 일어나고 있는지 확인할 수 있습니다.

이 게시물은 이전 게시물이라는 것을 알고 있지만 프록시 서버를 통해 SSL을 통해 SSL을 통해 안전한 원격 사이트로 SSIS 2008R2 (SQL Server Integration Services) 스크립트 작업 (vb.net 코드)에서 webclient를 사용하여 XML 파일을 다운로드하려는 비슷한 문제가있었습니다. 또한 인증이 필요했습니다.

해결책을 찾는 데 시간이 걸렸고이 게시물은 프록시 측에서 도움이되었습니다. 아래는 저를 위해 일한 스크립트 코드입니다. 비슷한 검색을하는 사람에게 유용 할 수 있습니다.

    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)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top