2014-12-11 2 views
1

У меня есть диспетчер задач, который будет хранить необработанный HTTP-трафик с заголовками и телом между localhost и SOAP API. Я нашел, что хорошим решением для этого является FiddlerCore. Применение работает только с HTTPS. В настоящее время я получил только свою просьбу. Но хотите увидеть ответ от SOAP API.Захват необработанного запроса HTTPS и ответа с помощью FiddlerCore

инициализирую FolderCore прокси при запуске приложения:

 CONFIG.bCaptureCONNECT = true; 
     CONFIG.IgnoreServerCertErrors = false; 
     FiddlerApplication.Prefs.SetStringPref("fiddler.config.path.makecert", @"c:\Program Files (x86)\Fiddler2\Makecert.exe"); 
     FiddlerApplication.AfterSessionComplete += FiddlerApplication_AfterSessionComplete; 
     if (!CertMaker.rootCertExists()) 
     { 
      if (!CertMaker.createRootCert()) 
      { 
       throw new Exception("Unable to create cert for FiddlerCore."); 
      } 
      X509Store certStore = new X509Store(StoreName.Root, StoreLocation.LocalMachine); 
      certStore.Open(OpenFlags.ReadWrite); 
      try 
      { 
       certStore.Add(CertMaker.GetRootCertificate()); 
      } 
      finally 
      { 
       certStore.Close(); 
      } 
     } 

Метод AfterSessionComplete:

private void FiddlerApplication_AfterSessionComplete(Session sess) 
    { 
     // Ignore HTTPS connect requests 
     if (sess.RequestMethod == "CONNECT") 
     { 
      return; 
     } 

     if (sess == null || sess.oRequest == null || sess.oRequest.headers == null) 
     { 
      return; 
     } 
     // Request 
     string headers = sess.oRequest.headers.ToString(); 
     var reqBody = sess.GetRequestBodyAsString(); 

     // Response 
     var resHeaders = sess.oResponse.headers.ToString(); 
     var resBody = sess.GetResponseBodyAsString(); 

     // if you wanted to capture the response 
     //string respHeaders = session.oResponse.headers.ToString(); 
     //var respBody = session.GetResponseBodyAsString(); 

     // replace the HTTP line to inject full URL 
     string firstLine = sess.RequestMethod + " " + sess.fullUrl + " " + sess.oRequest.headers.HTTPVersion; 
     int at = headers.IndexOf("\r\n"); 
     if (at < 0) 
      return; 
     headers = firstLine + "\r\n" + headers.Substring(at + 1); 

     string output = headers + "\r\n" + 
         (!string.IsNullOrEmpty(reqBody) ? reqBody + "\r\n" : string.Empty) + "\r\n\r\n"; 

    } 

В web.config добавлено:

<defaultProxy> 
    <proxy autoDetect="false" bypassonlocal="false" proxyaddress="http://127.0.0.1:8888" usesystemdefault="false" /> 
</defaultProxy> 
+0

Ваш титул относится к HTTPS, но ваш вопрос конкретно исключает HTTPS. Вы бы отредактировали свой титул, чтобы удалить S из HTTPS, пожалуйста. – WizzleWuzzle

ответ

0

Is было очень легко. Б sess.oResponse.headers и sess.GetResponseBodyAsString() для этого

var resHeaders = sess.oResponse.headers.ToString(); 
    var resBody = sess.GetResponseBodyAsString(); 
Смежные вопросы