2016-06-01 1 views
0

C# 코드에서 proxy.pac을 구문 분석해야합니다. 현재 시스템이 아닌 파일에서 프록시 설정을 읽으므로 WebProxy-method를 통해 프록시를 가져 오는 것은 옵션이 아닙니다.C# (WPF)에서 proxy.pac 파일 구문 분석

Jint와 ClearScript를 사용하여 C# 코드 내에 중첩 된 JavaScript 엔진을 사용하려고했습니다. 하지만 둘 다 내 proxy.pac에서 "shExpMatch"방법을 읽지 못합니다.

이 파일은 매우 간단하고 내 현재의 시스템에서 작동 :

function FindProxyForURL(url, host) { 
    if (shExpMatch(host, "192.*")) { 
     return "DIRECT"; 
    } 

    return "PROXY proxyServer:8080; PROXY proxyServer2:80"; 
} 

이 도구의 이전 구현 Microsoft.JScript.Vsa.VsaEngine.CreateEngine를 사용했다(); Visual Studio 2005 (10 년 전부터!) 이후로 더 이상 사용되지 않으며 JS 엔진 시작, 파일 읽기 또는 다운로드 및 결과 result = engine.evaluate (스크립트). 그런 다음 그들은이 결과 객체를 새로운 url과 host et voilà와 함께 사용할 수 있습니다.

왜 이러한 JS 엔진 중 누구도 shExpMatch 메소드를 알고 있지 않습니까?

+0

WPF와 관련하여 무엇이 있습니까? – MickyD

+0

C# WPF가 아니라 C# WinForms, C# Universal App입니다. 1 플랫폼에서는 작동하지만 다른 플랫폼에서는 작동하지 않는 솔루션이있을 수 있습니다. 그래서 명확하게하기 위해 WPF로 태그를 지정했습니다. – ecth

+0

내가 말했듯이, 이것이 어떻게 관련되어 있는지 알 수 없습니다. _Windows Presentation Foundation_ – MickyD

답변

1

브라우저에서 proxy.pac 코드로 사용할 수있는 API은 JavaScript 표준의 일부가 아니므로 Jint 및 V8과 같은 일반 JavaScript 엔진은 shExpMatch과 같은 메서드를 제공하지 않습니다. 이 API를 공개하는 것은 브라우저 (또는 다른 호스트)의 책임입니다.

편집 : Mozilla의 구현 here을 살펴보십시오. 대부분은 pacUtils 문자열입니다. 이 문자열을 C# 코드로 정의하고 스크립트 엔진에 전달할 수 있습니다. 그러면 호스트의 도움이 필요한 dnsResolve, myIpAddressalert으로 남을 것입니다. 다음은 ClearScript 샘플입니다.

Func<string, string> dnsResolve = name => { 
    var addrs = Dns.GetHostEntry(name).AddressList; 
    return addrs.First(a => a.AddressFamily == AddressFamily.InterNetwork).ToString(); 
}; 

engine.Execute(pacUtils); 
engine.Script.dnsResolve = dnsResolve; 
engine.Script.myIpAddress = new Func<string>(() => dnsResolve(Dns.GetHostName())); 
engine.Script.alert = new Action<string>(msg => Console.WriteLine("PAC-alert: " + msg)); 

이 설정이 완료되면 proxy.pac 코드를 실행할 수 있습니다.

+0

완벽하게 이해합니다. 그러나 그것을 멋지게 할 수있는 방법이 있습니까? VsaEngine은''Eval (script, engine)''을 사용하고 작업이 완료되었습니다. – ecth

+0

나는 위의 대답에 대한 잠재적 인 해결책을 추가했습니다. – BitCortex

+0

고마워요. 실제로 사람들에게 도움이 될 수 있기 때문에 이것을 답변으로 표시했습니다. 대신이 WinApi 호출을 사용합니다. https://msdn.microsoft.com/de-de/library/windows/desktop/aa384097%28v=vs.85%29.aspx 마샬링이 포함되어 있지만 다운로드, 읽고 필요에 따라 proxy.pac을 구문 분석 :) 아직도, 내 프로젝트에서 모질라 재단 코드를 사용하면 끝내 줄 것이다! – ecth