zoukankan      html  css  js  c++  java
  • 自定义Fiddler插件一

    上个月自定义了一个Fiddler的插件,可以根据请求生成接口自动化测试的RF和Python代码,这样测试人员只需要手动操作页面用Fiddler抓取报文,就可以直接生成RF、Python代码,然后只需要改一下改下变量部分就可以了。至于生成RF、Python代码主要还是字符串的拼接,虽然麻烦,但也不难,今天主要记录下自定义Fiddler插件。

    一、Fiddler抓包工具

    既然是Fiddler插件,肯定是基于Fiddler,这里我是基于Fiddler的5.0.20173.49666版本,这个版本号也是比较重要的,因为它会要求.Net的版本.用时它也公开的好几类接口.

    1.全局类:IFiddlerExtension,IAutoTamper,IAutoTamper2,IAutoTamper3
          接口是面向一个全局的插件,插件出现的位置和Log,TimeLine同级,插件编译成dll只能放到 Scripts文件夹下
    2.单个请求:Inspector2,IResponseInspector2,IRequestInspector2
          接口是面向于单独一个连接,插件会出现Inspector这个菜单下 和 Headers,TextView 同级,插件编译成dll只能放到 Inspectors 文件夹下
    3.命令行:IHandleExecAction
                接口可以让你的控件接收到命令行传来的命令
    4.导入导出:ISessionExporter,ISessionImporter
                批量对请求经行导入导出操作,位置出现在右键菜单Save-Selectd Session-中 和File-ImportSession 弹出的菜单中,dll需要放到ImportExport中

    二、实现

    由于这里使用的是Fiddler5.0.20173.49666版本,它是基于4.6.1的,如果选低的.net版本会报下面的警告.所以选的是.net4.6.1.

    1.新建类库引入Fiddler

    这里新建了一个名为CustomInspectors的类库,引用->右键->添加引用->浏览,找到Fiddler的安装目录下的Fiddler.exe.

    2.AssemblyInfo.cs配置Fiddler

    在AssemblyInfo.cs引入Fiddler.

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

    3.创建用户控件

    选中类库,右键-添加-新建项-用户控件,这里为了演示,并没有实现生成RF、python代码功能,只是把请求的body显示出来,所以只用了一个富文本框。并把文本框属性设置为public.

    4.新建类实现Inspector2, IRequestInspector2

    这里创建了一个CatchInspectors实现Inspector2, IRequestInspector2,同时引入上面创建的用户控件,这样可以给用户控件的富文本框赋值,将Fiddler抓包的内容显示出来。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using Fiddler;
    
    
    namespace CustomInspectors
    {
        public class CatchInspectors : Inspector2, IRequestInspector2
        {
            private HTTPResponseHeaders _responseHeaders;
            public CusUserControl cusUserControl { get; set; }
            
            private byte[] _requestBody;
            private bool _bDirty;
            public bool _bReadOnly;
            private HTTPRequestHeaders _requestHeaders;
    
            public HTTPResponseHeaders headers
            {
                get =>_responseHeaders;
    
                set => _responseHeaders =value;
            }
            public byte[]body
            {
                get=> _requestBody;
                set {
                    _requestBody = value;
                    cusUserControl.RTxtBoxBody.Text = System.Text.Encoding.Default.GetString(value);
                }
            }
    
            public bool bDirty => true;
    
            public bool bReadOnly { get => true; set => _bReadOnly = value; }
            HTTPRequestHeaders IRequestInspector2.headers
            {
                get => _requestHeaders;
    
                set => _requestHeaders = value;
            }
    
            public override void AddToTab(System.Windows.Forms.TabPage o)
            {
                o.Text = "自定义插件";
                cusUserControl = new CusUserControl();
                cusUserControl.Dock = System.Windows.Forms.DockStyle.Fill;
                o.Controls.Add(cusUserControl);
                
            }
    
            public void Clear()
            {
                cusUserControl.RTxtBoxBody.Text = string.Empty;
                return;
            }
    
            public override int GetOrder()
            {
                return 100;
            }
        }
    }
    View Code

    5.编译放入Fiddle中

    将编译生成的dll文件放入Fiddler安装包的Inspectors文件夹下,再次打开Fiddler.选中一个请求,就会显示出自定义的插件内容了。这里自定义的插件与TextView有点像,都是显示请求的body内容。

  • 相关阅读:
    AJPFX解析成员变量和局部变量
    AJPFX关于Java Object类常用方法小总结
    AJPFX关于面向对象中的对象初始化整理,综合子父类、代码块等等
    AJPFX总结FileWriter类的write方法
    AJPFX总结java创建线程的三种方式及其对比
    java android中日期时间 问题总结
    安卓开发——ListView控件(初始化ListView、列表刷新、长按添加menu)
    android开发分辨率适配总结
    activity生命周期实例(不同启动模式)
    ViewPage最全解析
  • 原文地址:https://www.cnblogs.com/5ishare/p/9161528.html
Copyright © 2011-2022 走看看