2016-10-05 15 views
0

WebBrowser 컨트롤을 안전한 웹 사이트로 이동하고 프로그래밍 방식으로 자격 증명을 입력하고 탐색하는 C# .NET 4.0 응용 프로그램을 작성하고 있습니다. 특정 페이지로 이동합니다. 이 같은 단일 버튼을 클릭, 어떤 결과 인 HTTPS 요청 및 응답을 캡처 할 :C# 응용 프로그램에서 FiddlerCore를 사용하여 응용 프로그램 자체에서 발생하는 단일 HTTPS 요청 및 응답을 캡처합니다.

NavigateControlToWebPage("https://fancyDancySite.com/fancyPage"); 
    IHTMLElement btn = doc.getElementById("fancyDancyButton"); 
    StartCapturingMyOwnHTTPSStuffWithFiddlerCore(); 
    btn.click(); 
    StopTheCapturing(); 

나는 웹 예제의 수에 따라이 덤비는 한을하고,을 사용하여에 FiddlerCore 용 SampleApp. StartCapturing 메서드가 수행해야하는 작업을 수행하는 방법을 이해할 수 없습니다. 내 코드는 현재이 코드이지만 성공하지 못합니다.

WebProxy myProxy = new WebProxy(); 
Uri newUri = new Uri("https://localhost:8080"); 
myProxy.Address = newUri; 

if (!Fiddler.CertMaker.rootCertExists()) 
{ 
    if (!Fiddler.CertMaker.createRootCert()) 
    { 
     throw new Exception("Unable to create cert for FiddlerCore."); 
    } 
} 
if (!Fiddler.CertMaker.rootCertIsTrusted()) 
{ 
    if (!Fiddler.CertMaker.trustRootCert()) 
    { 
     throw new Exception("Unable to install FiddlerCore's cert."); 
    } 
} 
Fiddler.FiddlerApplication.Startup(8080, Fiddler.FiddlerCoreStartupFlags.DecryptSSL); 

Fiddler.FiddlerApplication.AfterSessionComplete += Fiddler_AfterSessionComplete; 

ETA : 외부 https 사이트에 액세스하려고 시도하고 있습니다.

ETA : 웹 브라우저 컨트롤이 일반적인 웹 사이트 대신 "탐색이 취소되었습니다"페이지를 가져 오기 때문에 약간의 효과가 있습니다. 하지만 그건 내가 :) 원하는

ETA 효과되지 않습니다 :이 경우에는 적합하지 않다 생각 SetProxyInProcess을 제거

ETA :

public void StartCapturingMyOwnHTTPSStuffWithFiddlerCore() 
    { 
     InstallCertificate(); 
     FiddlerApplication.Startup(0, FiddlerCoreStartupFlags.Default); 
     FiddlerApplication.AfterSessionComplete += Fiddler_AfterSessionComplete; 
    } 

이 다음과 같이 나의 현재 StartCapturing의 방법은 작동하지만, 내가 & ~RegisterAsSystemProxy을 추가하면 작동이 멈 춥니 다.

답변

0

WebProxy myProxy에 대한 코드는 모두 System.NET의 HTTPWebRequests 용 웹 프록시를 설정하는 데 사용되는 코드이기 때문에 필요하지 않지만 웹 브라우저 컨트롤은 System.NET HTTP 스택을 사용하지 않고 WinINET의 스택을 사용합니다.

설정중인 StartupFlags은 충분하지 않습니다. 모든 응용 프로그램의 트래픽을 캡처하려면 FiddlerCoreStartupFlags.Default을 사용해야하며 SetProxyInProcess API를 사용하여 현재 응용 프로그램에서만 트래픽을 얻으려는 경우 FiddlerCoreStartupFlags.Default & ~FiddlerCoreStartupFlags.RegisterAsSystemProxy을 사용해야합니다.

"StopTheCapturing"코드가 구현 된 방법에 대해 매우 신중해야합니다. 너무 일찍 전화를 걸 가능성이 매우 높습니다. 웹 브라우저 컨트롤에서 단추를 클릭하는 호출이 거의 돌아옵니다 즉시, 그러나 웹 브라우저 컨트롤은 이후 일정 기간 동안 작업을 수행 할 가능성이 있습니다.

+0

감사합니다. Eric. 'Default & ~ RegisterAsSystemProxy' 플래그를 지정하면'Fiddler_AfterSessionComplete' 이벤트가 실행되지 않습니다. 응용 프로그램 내에서 요청한 HTTPS 세션을 가져 오려고합니다. 나는 결코'SetProxyInProcess'가 작동하지 못하게했다. 어떻게해야합니까? 내가 온라인에서 찾은 사례는 저에게 효과가 없었습니다. (편집 : "StopCapture"에 관해서는, 실제 소스 코드 내에서 타이밍이 맞았다. 단지 네 줄짜리 예제였다.) – WizzleWuzzle

+0

어떻게 구체적으로'SetProxyInProcess'를 호출 했습니까? 예를 들면 다음과 같이 호출되어야합니다. 'Fiddler.URLMonInterop.SetProxyInProcess ("127.0.0.1:7777", "<-loopback>");'프록시가 포트'7777'에서 실행중인 경우. – EricLaw

+0

"프록시가 포트 7777에서 실행중인 경우"... 어떤 프록시가 "사용자"프록시의 의미인지 확실하지 않습니까? 응용 프로그램 자체에서 생성하는 HTTPS 트래픽 만 응용 프로그램 내에서 캡처하려면 어떤 단계를 수행해야하는지 명확하지 않습니다. – WizzleWuzzle