2

这个问题与 TheChange 's Question 相关

要求发生了变化,所以我需要在 Fiddler 中使用一个扩展来完成相同的任务。

如何使用 C# 创建 Fiddler 除外的扩展?

我可以在 C# 中创建一个 dll - 我还尝试了旧的 .net 2.0 编译器。我首先尝试在 Program-File 文件夹中使用我的扩展名,然后在 MyDocuments 文件夹中使用我的扩展名(提琴手网站上提到的两个) .

如果我从 Fiddler-extensions 下载了一个 extension-dll,它可以在 Fiddler 重新启动后使用。

如果我在 Fiddler 运行时尝试替换我的 .dll 文件,Windows 会告诉我 .dll 已被程序使用并且现在无法更改。扩展显示在扩展选项卡中。

现在我处于死胡同,不知道我现在应该搜索什么,因为其他人似乎没有这个问题。

也许这需要回答我的问题:

使用:MS Visual C# 2008 Express Edition 我的项目还与 Fiddler 和 System.Windows.Forms 链接(没有找到 Fiddler 上提到的 System.Windows.WinForms)。

在我的扩展中使用[assembly: Fiddler.RequiredVersion("2.2.7.0")],我的 Fiddler 是 2.2.8.x。

如果这对答案感兴趣:我也使用 IFiddlerExtension-Help 描述来获取必要的代码。

我的主要问题是 Fiddler 没有给我任何注释或失败,但似乎找到了扩展但由于某种原因无法使用它。

    using System;
using System.Windows.Forms;
using Fiddler;

[assembly: Fiddler.RequiredVersion("2.2.7.0")]

namespace validate_js
{
    public interface IFiddlerExtension
    {
        // Called when Fiddler User Interface is fully available
        void OnLoad();

        // Called when Fiddler is shutting down
        void OnBeforeUnload();
    }
    public interface IAutoTamper : IFiddlerExtension
    {
        // Called before the user can edit a request using the Fiddler Inspectors
        void AutoTamperRequestBefore(Session oSession);

        // Called after the user has had the chance to edit the request using the Fiddler Inspectors, but before the request is sent
        void AutoTamperRequestAfter(Session oSession);

        // Called before the user can edit a response using the Fiddler Inspectors, unless streaming.
        void AutoTamperResponseBefore(Session oSession);

        // Called after the user edited a response using the Fiddler Inspectors.  Not called when streaming.
        void AutoTamperResponseAfter(Session oSession);

        // Called Fiddler returns a self-generated HTTP error (for instance DNS lookup failed, etc)
        void OnBeforeReturningError(Session oSession);
    }

    public class Violin : IAutoTamper
    {
        string sUserAgent = "";

        public Violin()
        {

            sUserAgent = "Violin";

        }
        public void OnLoad()
        {

            string strResponse;
            FiddlerApplication.Log.LogString("S&T-Script wird ausgeführt.");
            Fiddler.FiddlerApplication.BeforeResponse += delegate(Fiddler.Session oS)
            {
                strResponse = oS.GetResponseBodyAsString(); // safe BodyContent in strResponse
                if (System.String.Compare(strResponse, "getElementbyID", true) == 0)
                {

                    FiddlerApplication.Log.LogString("getElementbyID found - could have a different attitude in IE 8. Please check");

                }

            };

        }
        public void OnBeforeUnload()
        {

        }

        public void AutoTamperRequestBefore(Session oSession)
        {
            oSession.oRequest["User-Agent"] = sUserAgent;
        }
        public void AutoTamperRequestAfter(Session oSession) { }
        public void AutoTamperResponseBefore(Session oSession) { }
        public void AutoTamperResponseAfter(Session oSession) { }
        public void OnBeforeReturningError(Session oSession) { }

    }


}

我会感谢任何可能的帮助...

4

1 回答 1

2

您在命名空间中重新声明IAutoTamperandIFiddlerExtension接口,这“隐藏”了 Fiddler 命名空间中的真实接口。

如果你从你的代码中删除那些接口重新声明(只留下你的Violin类),你会发现你的 DLL 工作得很好。

于 2010-02-24T01:14:45.510 回答