【转】使用FiddlerCore来测试WebAPI

大家在调试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/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436672.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转】程序在内存中的分布

前些天学习到了程序在虚拟内存中分布的一些知识点,结合在网上查阅的一些资料,整理一下知识点。本博客参考博主 hackbuteer1的《程序在内存中的分布》这篇文章。 v 在现代的操作系统中,当我们说到内存,往往需要分两部分来讲&#x…

GARFIELD@04-02-2005

treat 转载于:https://www.cnblogs.com/rexhost/archive/2005/04/02/130985.html

【转】TechEd第一课:新一代关系管理系统XRM**

提起微软的CRM产品,最先想到的是CRM 4.0。除了字面理解上的客户关系管理系统外,微软也赋予这款产品“应用开发平台”的角色,并给它一个新名字——XRM。XRM到底是什么东西?它能用来做什么?这些问题都在今天这节“微软新…

图形工具包 linux,GTK 4.0图形工具包正式发布:时隔四年的重大版本!

GTK是用于创建图形用户界面的工具包,GTK提供了一整套的小部件,适用于从小型一次性工具到完整的应用程序套件的项目。GTK是GNOME开发平台的核心,但是它也可以用于编写其他Linux环境的应用程序,以及针对微软Windows和苹果macOS的应用…

linux设备驱动学习,linux设备驱动学习4

Linux设备驱动程序学习(4)-高级字符驱动程序操作[(1)ioctl and llseek]今天进入《Linux设备驱动程序(第3版)》第六章高级字符驱动程序操作的学习。一、ioctl大部分设备除了读写能力,还可进行超出简单的数据传输之外的操作,所以设备…

[代码阅读] ECS toString实现方法

引言 ECS 提供了一种编程方式来生成以不同标记语言编写的文档。它设计为通过面向对象的抽象来生成所有标签。 ECS 目前版本为1.4.2 ,支持 HTML 4.0 和 XML 。 因为工作原因,作者粗略读了ECS的部分原代码,着重了解ECS如果通过toString方法…

【转】设备数据通过Azure Functions 推送到 Power BI 数据大屏进行展示

设备数据通过Azure Functions 推送到 Power BI 数据大屏进行展示(1.准备工作) 原创 Sean Yu 云计算实战 2019-12-06 本案例适用于开发者入门理解Azure Functions/ IoT Hub / Service Bus / Power BI等几款产品。 主要实战的内容为: 将设备遥…

【转】Azure Messaging-ServiceBus Messaging消息队列技术系列1-基本概念和架构

前段时间研究了Window Azure ServiceBus Messaging消息队列技术,搞了很多技术研究和代码验证,最近准备总结一下,分享给大家。 首先,Windows Azure提供了两种类型的消息队列机制:Azure Queues和ServiceBus Queues。 其…

Atlas应用程序调试技巧

本文为翻译文章,原文地址:http://atlas.asp.net/docs/Overview/debug.aspx “Atlas”程序由服务器端代码和客户端代码组成,并且,浏览器可能会要去异步请求一些数据。那么,怎样才能Debug这样的web程序呢。本文将告诉…

【转】Azure Messaging-ServiceBus Messaging消息队列技术系列2-编程SDK入门

各位,上一篇基本概念和架构中,我们介绍了Window Azure ServiceBus的消息队列技术的概览。接下来,我们进入编程模式和详细功能介绍模式,一点一点把ServiceBus技术研究出来。 本章我们主要介绍ServiceBus的编程SDK编程入门。 首先…

linux octave源码安装,在Linux操作系统上安装Octave的方法

本文介绍在Ubuntu、Debian、Arch Linux、Fedora、OpenSUSE操作系统上安装Octave(也称GNU Octave)的方法,它还支持Flatpak方式安装。简介GNU Octave是一种用于科学和数学计算操作的解释性命令语言,它与Matlab兼容,支持各种扩展,允许…

linux安装静默安装was7,WAS7.0 - 安装并升级WAS7.0.0.31(静默安装)

WAS7.0 - 安装并升级WAS7.0.0.31(静默安装)安装之前需要准备的文件:C1G35ML.tar.gz:WAS7.0安装包C1G36ML.tar.gz:WAS升级工具7.0.0-WS-WASSDK-LinuxX64-FP0000031.pak 7.0.0-WS-WAS-LinuxX64-FP0000031.pak :7.0.0.31升级包&…

【转】Azure云存储及存储账户概述***

本文介绍下Azure云存储及存储账户。 1、什么是微软Azure云存储 微软Azure云存储是微软提供的云端数据存储服务,是一种可伸缩、持久化的数据存储服务,可以在Internet上被访问并按实际存储容量收费。它也可以被REST API访问,可以保存Azure云端…

插入法排序c语言程序,插入排序算法及C语言实现

插入排序算法是所有排序方法中最简单的一种算法,其主要的实现思想是将数据按照一定的顺序一个一个的插入到有序的表中,最终得到的序列就是已经排序好的数据。直接插入排序是插入排序算法中的一种,采用的方法是:在添加新的记录时&a…

【转】Microsoft Azure存储服务:存储账户****

在正式使用 Microsoft Azure 存储服务之前,你至少需要有一个 Azure 订阅并创建「存储账户」。Azure 订阅账户可以访问和使用各种 Azure 服务,在有了 Azure 订阅之后便可以开始创建「存储账户」并开始使用前面存储类型与访问中曾介绍过的 blobs、表&#…

【转】Azure Logic App Demo

使用Azure Logic App Azure Function 完成简单的业务流程 什么是Logic App Azure 逻辑应用提供了,用于在云中简化并实现可缩放的集成和工作流的方式。 它提供了可视化设计器,用于为流程建模并将流程作为一系列步骤(称为工作流)…

【转】Azure应用部署方式对比

如图 azure环境应用托管方式对比 1. app service serverless azure的app service支持几乎所有语言开发的web app,既可以手动使用publish profile部署,也可以使用vsts创建一个(CDCI)持续集成。都非常方便。 而azure的function app…

c语言哪个方法称为程序大门,学会这8个经典小程序,就相当于跨入了C语言大门...

描述【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。2.程序源代码&#x…

【转】无服务计算(Serverless Computing)核心知识

Serverless Computing概念 云原生计算基金会CNCF(Cloud Native Computing Foundation, CNCF)Serverless Whitepaper v1.0对无服务器计算作了如下定义: Serverless computing refers to the concept of building and running applications tha…

c语言中指数优化,西藏东财中证医药卫生指数C净值下跌1.96% 请保持关注

来源:金融界基金作者:机器君金融界基金08月07日讯 西藏东财中证医药卫生指数型发起式证券投资基金(简称:西藏东财中证医药卫生指数C,代码008552)公布最新净值,下跌1.96%。本基金单位净值为1.397元,累计净值…