我如何通过 fiddlercore 捕获 https 响应?

How can i capture https respond via fiddlercore?

我已经下载了 fiddlercore DEMO,我尝试在我的依赖于 WPF 的应用程序中使用它,然后我有一个问题,在我的应用程序中我无法捕获 https 响应资源? enter image description here

我的代码就在下面:

    using Fiddler;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows;

namespace operateToolWPF.Utils
{
    public class MyFiddler
    {
        static Proxy oSecureEndpoint;
        static string sSecureEndpointHostname = "localhost";
        static int iSecureEndpointPort = 7777;
        public List<Fiddler.Session> oAllSessions { get; set; }


        public  void DoQuit()
        {
            if (null != oSecureEndpoint) oSecureEndpoint.Dispose();
            Fiddler.FiddlerApplication.Shutdown();
            //Thread.Sleep(500);
        }
        private  string CalcResponseSize(Session oS)
        {
            if (null == oS.oResponse) return String.Empty;
            var cBytesOut = 0;

            if (null != oS.responseBodyBytes) cBytesOut += oS.responseBodyBytes.Length;
            if ((null != oS.oResponse) && (null != oS.oResponse.headers)) cBytesOut +=
               oS.oResponse.headers.ByteCount();
            return cBytesOut.ToString();
        }

        public  void WriteSessionList(List<Fiddler.Session> oAllSessions)
        {
            ConsoleColor oldColor = Console.ForegroundColor;
            Console.ForegroundColor = ConsoleColor.White;
            Console.WriteLine("Session list contains...");
            try
            {
                Monitor.Enter(oAllSessions);
                foreach (Session oS in oAllSessions)
                {
                    Console.Write(String.Format("{0} {1} {2} {3} {4}  {5}  {6}\n", oS.id, oS.oRequest.headers.HTTPMethod, oS.fullUrl, oS.responseCode, oS.oResponse.MIMEType, (oS.Timers.ClientBeginResponse - oS.Timers.ClientBeginRequest), CalcResponseSize(oS)));
                }
            }
            finally
            {
                Monitor.Exit(oAllSessions);
            }
            Console.WriteLine();
            Console.ForegroundColor = oldColor;
        }


        public void DoFiddler()
        {
            oAllSessions = new List<Fiddler.Session>();
            //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.");
            //    }
            //}

            #region AttachEventListeners
            Fiddler.FiddlerApplication.OnNotification += delegate(object sender, NotificationEventArgs oNEA) { 
                Console.WriteLine("** NotifyUser: " + oNEA.NotifyString); 
            };
            Fiddler.FiddlerApplication.Log.OnLogString += delegate(object sender, LogEventArgs oLEA) { 
                Console.WriteLine("** LogString: " + oLEA.LogString); 
            };

            Fiddler.FiddlerApplication.BeforeRequest += delegate(Fiddler.Session oS)
            {
                //Console.WriteLine("Fiddler.FiddlerApplication.BeforeRequest");
                oS.bBufferResponse = true;
                Monitor.Enter(oAllSessions); 
                oAllSessions.Add(oS);
                //Console.Write(String.Format("{0} {1} {2} {3} {4}  {5}  {6}\n", oS.id, oS.oRequest.headers.HTTPMethod, oS.fullUrl, oS.responseCode, oS.oResponse.MIMEType, (oS.Timers.ClientBeginResponse - oS.Timers.ClientBeginRequest), CalcResponseSize(oS)));
                Monitor.Exit(oAllSessions);
                oS["X-AutoAuth"] = "(default)";
                if ((oS.oRequest.pipeClient.LocalPort == iSecureEndpointPort) && (oS.hostname == sSecureEndpointHostname))
                {
                    oS.utilCreateResponseAndBypassServer();
                    oS.oResponse.headers.SetStatus(200, "Ok");
                    oS.oResponse["Content-Type"] = "text/html; charset=UTF-8";
                    oS.oResponse["Cache-Control"] = "private, max-age=0";
                    oS.utilSetResponseBody("<html><body>Request for httpS://" + sSecureEndpointHostname + ":" + iSecureEndpointPort.ToString() + " received. Your request was:<br /><plaintext>" + oS.oRequest.headers.ToString());
                }
            };

            Fiddler.FiddlerApplication.AfterSessionComplete += delegate(Fiddler.Session oS)
            {
                //Console.WriteLine("Fiddler.FiddlerApplication.AfterSessionComplete");
                //Console.Title = ("Session list contains: " + oAllSessions.Count.ToString() + " sessions");
                //DoQuit();
            };

            // Tell the system console to handle CTRL+C by calling our method that
            // gracefully shuts down the FiddlerCore.
            //
            // Note, this doesn't handle the case where the user closes the window with the close button.
            // See http://geekswithblogs.net/mrnat/archive/2004/09/23/11594.aspx for info on that...
            //
            #endregion AttachEventListeners
            string sSAZInfo = "NoSAZ";
#if SAZ_SUPPORT
            sSAZInfo = Assembly.GetAssembly(typeof(Ionic.Zip.ZipFile)).FullName;

            DNZSAZProvider.fnObtainPwd = () =>
            {
                Console.WriteLine("Enter the password (or just hit Enter to cancel):");
                string sResult = Console.ReadLine();
                Console.WriteLine();
                return sResult;
            };

            FiddlerApplication.oSAZProvider = new DNZSAZProvider();
#endif

            Console.WriteLine(String.Format("Starting {0} ({1})...", Fiddler.FiddlerApplication.GetVersionString(), sSAZInfo));
            Fiddler.CONFIG.IgnoreServerCertErrors = false;
            FiddlerApplication.Prefs.SetBoolPref("fiddler.network.streaming.abortifclientaborts", true);

            FiddlerCoreStartupFlags oFCSF = FiddlerCoreStartupFlags.Default;
            int iPort = 8877;
            Fiddler.FiddlerApplication.Startup(iPort, oFCSF);
            FiddlerApplication.Log.LogFormat("Created endpoint listening on port {0}", iPort);

            FiddlerApplication.Log.LogFormat("Starting with settings: [{0}]", oFCSF);
            FiddlerApplication.Log.LogFormat("Gateway: {0}", CONFIG.UpstreamGateway.ToString());

            oSecureEndpoint = FiddlerApplication.CreateProxyEndpoint(iSecureEndpointPort, true, sSecureEndpointHostname);
            if (null != oSecureEndpoint)
            {
                FiddlerApplication.Log.LogFormat("Created secure endpoint listening on port {0}, using a HTTPS certificate for '{1}'", iSecureEndpointPort, sSecureEndpointHostname);
            }


        }
    }
}

谁能帮帮我?谢谢!

我希望这能解决这个演示应用程序中的所有问题,他已经清楚地解释了如何跟踪 HTTP 和 HTTPS 请求。对于 HTTP,您可以直接收听 AfterSessionComplete 事件,但对于 HTTPS,您需要安装 Fiddler核心证书这个 https://weblog.west-wind.com/posts/2014/jul/29/using-fiddlercore-to-capture-http-requests-with-net