大家在调试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,我们同样需要信任这个证书,相关的代码如下:

public static bool InstallCertificate()
{
if (!CertMaker.rootCertExists())
{
if (!CertMaker.createRootCert())
return false; if (!CertMaker.trustRootCert())
return false;
} return true;
}

开始捕获

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

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. 使用Fiddler测试WebApi接口

    Fiddler是好用的WebApi调试工具之一,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据,Fiddler 是以代理web服务器的形式工作的,使用 ...

  2. 使用SOAPUI测试WEBAPI接口

    其实很简单,用起来也挺方便的. 首先,先去百度下SoapUI 下载,下载安装好后,打开软件. 1.新建一个项目 点击 Create Empty Project 按钮后,会自动新建一个项目,名字默认为: ...

  3. Fiddler测试WebApi的Post方法报错

    标题头要加 Content-Type: application/json,Request Body中写json数组.

  4. 使用 FiddlerCore 自定义 HTTP/HTTPS 网络代理

    Fiddler 是个很好用的网络请求查看与调试工具,还可以写插件来扩展其功能. Fiddler 插件开发,使用 WPF 作为 UI 控件 - J.晒太阳的猫 - 博客园 但部分场景下,需要自定义很多网 ...

  5. asp.net webAPI 自动生成帮助文档并测试

    之前在项目中有用到webapi对外提供接口,发现在项目中有根据webapi的方法和注释自动生成帮助文档,还可以测试webapi方法,功能很是强大,现拿出来与大家分享一下. 先看一下生成的webapi文 ...

  6. .NET Core系列 :4 测试

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

  7. WebAPI

    WebAPI的Host OWIN IIS WebAPI 的handler和Filter有啥区别? WebAPI  常用 Filters Exception Filter Timer Filter Lo ...

  8. 20、ASP.NET MVC入门到精通——WebAPI

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 微软有了Webservice和WCF,为什么还要有WebAPI? 用过WCF的人应该都清楚,面对那一大堆复杂的配置文件,有时候一出问题,真的 ...

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

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

随机推荐

  1. [WPF]Slider控件常用方法

    WPF的Slider控件继承自RangeBase类型,同继承自RangeBase的控件还有ProgressBar和ScrollBar,这类控件都是在一定数值范围内表示一个值的用途. 首先注意而Rang ...

  2. <<UML大战需求分析>>阅读笔记(2)

    <<UML大战需求分析>>阅读笔记(2)> 此次读了uml大战需求分析的第三四章,我发现这本书讲的特别的好,由于这学期正在学习设计模式这本书,这本书就讲究对uml图的利用 ...

  3. C语言小练习一

    题目要求:国王将金币作为工资,发放给忠诚的骑士.第1天,骑士收到一枚金币:之后两天(第2天和第3天)里,每天收到两枚金币:之后三天(第4.5.6天)里,每天收到三枚金币:之后四天(第7.8.9.10天 ...

  4. PHP 通过设置P3P头来实现跨域访问COOKIE

    CentOS的系统(Linux 内核) 编辑HOST vi /etc/hosts 加入127.0.0.1 www.a.com127.0.0.1 www.b.com 首先:创建 a_setcookie. ...

  5. centos安装lamp环境

    通过yum安装,需要联网且为su账号 yum -y install httpd php mysql mysql-server php-mysql 设置开启启动mysql,httpd     /sbin ...

  6. SAX解析xml文件

    需要做一个银行名字的列表. 因为有很多,所以想到了用xml来保存,然后uongDAX解析. public class BankSelectActivity extends BaseActivity{ ...

  7. [转]MySQL批量更新死锁案例分析

    文章出处:http://blog.csdn.net/aesop_wubo/article/details/8286215 问题描述 在做项目的过程中,由于写SQL太过随意,一不小心就抛了一个死锁异常, ...

  8. STL源码--序列式容器

    1. vector: vector的内存管理,动态分配内存,不需要程序员来维护存储空间,是与array最大的区别,程序员只需从逻辑上关注代码,而不需要对内部的存储空间的分配和回收分心.首先,vecto ...

  9. Byte,TBytes,array of Byte, array[0..9] of byte的区别

    Byte前面已经说是存放bit的单元,是电脑内存的基本单位,byte表示0-255中的256个数字 下面为Byte的用法: var B: Byte; // 表示0-255的数字 begin B := ...

  10. RHEL6.5 删除桌面启动器(计算机/Home/回收站)

    首先,安装gconf-editor以获得gconftool-2命令 终端命令: gconftool-2 --set /apps/nautilus/desktop/computer_icon_visib ...