FiddlerCore C#HTTPS事件未触发

时间:2015-09-17 15:35:11

标签: c# fiddlercore

对,我有以下代码:

public partial class Form1 : Form
{
    delegate void UpdateUI();
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {

        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.OnNotification += delegate (object snder, NotificationEventArgs oNEA) { MessageBox.Show("** NotifyUser: " + oNEA.NotifyString); };
        Fiddler.FiddlerApplication.Log.OnLogString += delegate (object snder, LogEventArgs oLEA) { MessageBox.Show("** LogString: " + oLEA.LogString); };
        Fiddler.FiddlerApplication.AfterSessionComplete += FiddlerApplication_OnAfterSessionComplete;
        Fiddler.FiddlerApplication.Startup(0, FiddlerCoreStartupFlags.Default & FiddlerCoreStartupFlags.DecryptSSL);

    }


    void FiddlerApplication_OnAfterSessionComplete(Session oSession)
    {
        if(oSession.fullUrl.Contains("google.com"))
        richTextBox1.Invoke(new UpdateUI(() =>
        {
            richTextBox1.AppendText(oSession.GetResponseBodyAsString());

        }));

    }

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        Fiddler.FiddlerApplication.Shutdown();
    }
}

事情是在启动时设置了DecryptSSL标志,on aftersesssion complete永远不会触发,我也从来没有从通知或日志回调中获得任何消息。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我认为端口0可能是Startup()中的问题,我尝试使用端口8888:

Fiddler.FiddlerApplication.Startup(8888, FiddlerCoreStartupFlags.Default & FiddlerCoreStartupFlags.DecryptSSL);

我在响应之前和请求处理程序之前尝试了这些,而不是OnAfterSessionComplete。在Form1_Load()

Fiddler.FiddlerApplication.BeforeRequest += new SessionStateHandler(HandleBeforeRequest);
Fiddler.FiddlerApplication.BeforeResponse += new SessionStateHandler(HandleBeforeResponse);

处理程序:

private void HandleBeforeRequest(Session oSession)
{
    oSession.bBufferResponse = true;
}

private void HandleBeforeResponse(Session oSession)
{
    if(oSession.fullUrl.Contains("google.com"))
    {
        richTextBox1.Invoke(new UpdateUI(() =>
        {
            richTextBox1.AppendText(oSession.GetResponseBodyAsString());

        }));
    }
}

顺便说一句,不知道你是否从样本中省略了它们,但我需要在构造函数中添加它们:

Load += Form1_Load;
FormClosing += Form1_FormClosing;

也可以在Shutdown()

之前添加它
FiddlerApplication.oProxy.Detach();