大家在调试Web相关的API时,经常会用Fiddler来查看相关的请求,以及返回结果。当然你也可以尝试修改或者重复发送你的请求信息。本文主要介绍如何使用代码来实现fiddler的功能。

Fiddler Core API

Fiddler Core几乎实现了你能用fiddler做的所有功能。直接在NuGet上搜索FiddlerCore即可下载FiddlerCore的.Net API。

开启Fiddler Application

使用下面的代码来开启FiddlerApplication

FiddlerApplication.Startup(9898, FiddlerCoreStartupFlags.Default);

执行后,fiddler会运行一个http代理服务器,你可以使用FiddlerCoreStartupFlags.RegisterAsSystemProxy 来把这个代理服务器指定为系统代理,这样就可以监听到本机所有的http请求。

当程序结束的时候,记得使用下面的语句来关闭代理。

FiddlerApplication.Shutdown();

捕获HttpRequest/HttpResponse

开启了Fiddler Application之后,Fiddler在捕获Request/Response的时候会触发下面这两个事件,你只需要定义事件来实现如何处理捕获到的请求即可。

//

// Summary:

// This event fires when a client request is received by Fiddler

public static event SessionStateHandler BeforeRequest;

//

// Summary:

// This event fires when a server response is received by Fiddler

public static event SessionStateHandler BeforeResponse;

安装证书

那么如何捕获https协议的页面呢?众所周知,https通过通信证书来实现了服务器端和客户端的加密,避免通信过程被监听。Fiddler通过中间人的方式来实现https协议的捕获,所谓中间人就是Fiddler注入到应用程序和服务器的中间,fiddler相对于服务器扮演客户端的角色,相对于客户端扮演服务器的角色,既然fiddler需要扮演服务器的角色,就需要一个证书,并且你的客户端需要信任Fiddler的证书。我们以中国银行的网站为例:

不开启Fiddler登陆网银时,证书信息为:

开启Fiddler登陆网银后证书信息为:

由于我的机器已经信任过Fiddler的证书,我们可以发现,在开启了Fiddler后,和中行网银的通信证书变为了:DO_NOT_TRUST_FiddlerRoot。如果使用FiddlerCore,我们同样需要信任这个证书,相关的代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

public static bool InstallCertificate()

{

    if (!CertMaker.rootCertExists())

    {

        if (!CertMaker.createRootCert())

            return false;

        if (!CertMaker.trustRootCert())

            return false;

    }

    return true;

}

开始捕获

使用这种方式,可以在不改变你现有代码的情况下,测试你的API返回结果是否正确。下面的例子是一个用FiddlerCoreAPI来测试SharePointOnline认证是否通过的例子。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

using Fiddler;

using Microsoft.SharePoint.Client;

using System;

using System.Collections.Generic;

using System.IO;

using System.Linq;

using System.Net;

using System.Security;

using System.Text;

using System.Threading.Tasks;

namespace FiddlerCoreTest

{

    class Program

    {

        static void Main(string[] args)

        {

            ServicePointManager.ServerCertificateValidationCallback = (a, b, c, d) => true;

            FiddlerApplication.BeforeRequest += FiddlerApplication_BeforeRequest;

            FiddlerApplication.BeforeResponse += FiddlerApplication_BeforeResponse;

            FiddlerApplication.Startup(9898, FiddlerCoreStartupFlags.Default | FiddlerCoreStartupFlags.RegisterAsSystemProxy);

            try

            {

                ClientContext context = new ClientContext("https://domain.sharepoint.com");

                SecureString se = new SecureString();

                foreach (var cc in "password")

                {

                    se.AppendChar(cc);

                }

                var cre = new SharePointOnlineCredentials("user@domain.onmicrosoft.com", se);

                var cookie = cre.GetAuthenticationCookie(new Uri("https://domain.sharepoint.com"));

            }

            catch (Exception e)

            {

            }

            FiddlerApplication.Shutdown();

            Console.ReadLine();

        }

        static void FiddlerApplication_BeforeResponse(Session oSession)

        {

            //想如何改写Response信息在这里随意发挥了

            Console.WriteLine("BeforeResponse: {0}", oSession.responseCode);

        }

        static void FiddlerApplication_BeforeRequest(Session oSession)

        {

            //想如何改写Request信息在这里随意发挥了

            Console.WriteLine("BeforeRequest: {0}, {1}", oSession.fullUrl, oSession.responseCode);

        }

    }

}

  

作者:独上高楼
出处:http://www.cnblogs.com/myprogram/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

【转】使用FiddlerCore来测试WebAPI相关推荐

  1. 使用FiddlerCore来测试WebAPI

    大家在调试Web相关的API时,经常会用Fiddler来查看相关的请求,以及返回结果.当然你也可以尝试修改或者重复你的请求信息.本文主要介绍如何使用代码来实现fiddler的功能. Fiddler C ...

  2. linux webapi测试,Webapi管理和性能测试工具WebBenchmark

    WebBenchmark是一款基于开源通讯组件Beetlex扩展的Webapi管理和性能测试工具,在传统工具中一般管理工具缺乏性能压测能力或有性能测试的缺少管理功能:WebBenchmark的设计目标 ...

  3. Webapi测试工具WebBenchmark v1.3发布

    这个版本更新的内容是统一使用BeetleX的Web SPA 插件作为服务的基础支持功能方便后期功能扩展,修复线程池配置太小引起的测试问题,修复统计显示的BUG. 安装 工具提供win64和linux6 ...

  4. Webapi管理和性能测试工具WebBenchmark

    WebBenchmark是一款基于开源通讯组件Beetlex扩展的Webapi管理和性能测试工具,在传统工具中一般管理工具缺乏性能压测能力或有性能压测的缺少管理功能:WebBenchmark的设计目标 ...

  5. WebApi网关之Bumblebee和Ocelot性能对比

    Bumblebee是基于.net core 2.1开发的WebApi网关组件,由于Bumblebee所追求的轻量化和性能,所以它并没有像Ocelot那样从asp.net core上进行扩展:而是构建在 ...

  6. .NET Core系列 :4 测试

    2016.6.27 微软已经正式发布了.NET Core 1.0 RTM,但是工具链还是预览版,同样的大量的开源测试库也都是至少发布了Alpha测试版支持.NET Core, 这篇文章 The Sta ...

  7. 【转】.net异步性能测试(包括ASP.NET MVC WebAPI异步方法)

    很久没有写博客了,今年做的产品公司这两天刚刚开了发布会,稍微清闲下来,想想我们做的产品还有没有性能优化空间,于是想到了.Net的异步可以优化性能,但到底能够提升多大的比例呢?恰好有一个朋友正在做各种语 ...

  8. WebApi系列~自主宿主HttpSelfHost的实现

    回到目录 宿主一词我们不会陌生,它可以看作是一个基础设施,它为一些服务和功能提供最底层的支持,如你的web应用程序可以运行在iis或者apache上,而这两个东西就是web应用程序的宿主,而今天说的自 ...

  9. 自行实现高性能MVC

    wcf虽然功能多.扩展性强但是也面临配置忒多,而且restful的功能相当怪异,并且目前没法移植.asp.net core虽然支持webapi,但是功能也相对繁多.配置复杂.就没有一个能让码农们安安心 ...

最新文章

  1. 【数据结构】排序算法总结
  2. tableau可视化数据分析60讲(七)-工作表操作(长篇干货建议收藏!)
  3. 上传图片-服务端-Api接口定义
  4. 我的iPhone+Mac+Omnifocus实践GTD和ZTD的几点心得
  5. php换行符sql,如何在PHP和MySQL的textarea中给换行符的同时避免SQL注入?
  6. 轻量级git服务gogs平台
  7. python json.dumps(output) ^ SyntaxError: invalid syntax
  8. 青云诀2显示登录服务器超时,青云诀2游戏突然显示数据包损坏怎么办 解决方案分享...
  9. 自定义协议的命令解析器
  10. Simulink的S函数仿真一阶RL和二阶RLC电路电路
  11. NC19822 我不爱她 kmp+hash
  12. 抖音国际版Tiktok不能注册的解决方案长期有效2020.8
  13. 一路两输入正与门SN74AHC1G08学习
  14. 软考程序员有必要考吗?
  15. 如何使用JavaScript滚动到页面顶部?
  16. 堡垒机如何传输文件_如何在linux下向堡垒机传文件
  17. linux 进程sockfd fork,Linux下多进程服务端客户端模型一(单进程与多进程模型)...
  18. 【Markdown常用语法总结】
  19. 高精度乘法(c++)
  20. 代码工具---长链接转换短链接

热门文章

  1. Java集合——HashMap、HashTable以及ConCurrentHashMap异同比较
  2. 使用Topshelf管理Windows服务
  3. H5新人福音~零配置搭建现代化的前端工程
  4. web.xml 配置文件 超详细说明!!!
  5. 2018年湘潭大学程序设计竞赛 G又见斐波那契
  6. java- WatchService监控
  7. 【Android实战】Gallary+ImageSwicther图片查看器
  8. 【整理】强化学习与MDP
  9. IPv6 相关的工作简介
  10. js和jQuery 获取屏幕高度、宽度