fiddler如何抓取接口4怎么本地调试接口

温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
网易杭州 QA Team
务实 专注 分享 做有态度的QA
LOFTER精选
网易考拉推荐
接口测试中fiddler与HttpClient模拟post接口四种请求数据的构造方法&&
11:35:20|&&分类:
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
在日常的接口测试工作中,模拟接口请求通常有两种方法,fiddler模拟和HttpClient模拟。Fiddler是一个简单的http协议调试代理工具,它界面友好,易于操作,是模拟http请求的利器之一。而我们常说的HttpClient工具包,追根溯源是&Apache基金的HttpComponent项目的一个组成部分。HttpComponent有三个主要组成部分,分别是HttpCore、HttpClient以及Asynch HttpClient。按照HttpComponent官网的介绍,HttpCore是底层的HTTP传输组件,用最小的内存来实现模拟客户端和服务器端的Http请求。HttpClient则是基于HttpCore实现的Http请求模拟代理,&可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包。Asynch HttpClient也是基于HttpCore的,顾名思义则是用于处理大量并发请求时的http代理。不同格式的数据通过这两种模拟方法的处理方式不同。 在日常的接口测试中,接口通常是get请求或者post请求。get请求的测试一般较为简单,只需设置好相关的请求头,url写正确即可。但是在测试post请求时,请求数据格式的设置往往就稍显复杂。尤其是在开发人员的接口文档描述不清楚的情况下,会影响到测试效率。& & &&故而本文总结了下post请求常见的四种数据格式和他们对应的fiddler、HttpClient模拟请求的构造方法。二、post请求主体详解& & & 一个正常的post请求主要包括请求行,请求头,请求主体,也就是& & &&method&&url&&version&& & &&headers&& & &&entity-body&& & &对于get请求来说没有请求主体entity-body。对于post请求而言,不会对发送请求的数据格式进行限制,理论上你可以发任意数据,但是服务器能不能处理就是另一回事了。服务器收到数据后,如何解析数据呢?它会以请求头中的Content-Type设置的内容来进行数据解析。确定好Content-Type的格式之后,请求主体的数据格式也就确定下来了。Content-Type的格式有四种:分别是application/x-www-form-urlencoded(这也是默认格式)、application/json、text/xml以及multipart/form-data、格式。说到post请求数据格式,有必要简单理一下HttpClient的HttpEntity对象,因为所有的post请求数据均需要置于HttpEntity实体中进行发送。HttpEntity是一个接口,实现这个接口的具体类有很多,比较常用的是StringEntity、UrlEncodedFormEntity(继承自StringEntity)、MultipartEntity。他们将在发送不同格式的post请求时被用到。接下来就详细地介绍每一种数据格式对应的fiddler请求模拟和httpClient请求模拟(java实现)的实现情况。三、四种Post请求数据格式和fiddler和HttpClient模拟请求构造(一)application/x-www-form-urlencoded数据格式 在W3C官网http://www.w3.org/TR/html401/interact/forms.html上明确对这种数据格式进行了定义:This is the default content type. Forms submitted with this content type must be encoded as follows:Control names and values are escaped. Space characters are replaced by `+', and then reserved characters are escaped as described in [RFC1738], section 2.2: Non-alphanumeric characters are replaced by `%HH', a percent sign and two hexadecimal digits representing the ASCII code of the character. Line breaks are represented as "CR LF" pairs (i.e., `%0D%0A'). The control names/values are listed in the order they appear in the document. The name is separated from the value by `=' and name/value pairs are separated from each other by `&'. 这是post请求最常见也是默认的数据提交格式。它要求数据名称(name)和数据值(value)之间以等号相连,与另一组name/value值之间用&相连。例如:parameter1=12345&parameter2=23456。将请求的内容进行格式化了,其实这个方法同时简化的客户端发送,也简化了服务器端获取,服务器通过getParameters(String name)即可获取到传送来的信息。我们看下分别用fiddler和HttpClient的话如何模拟post请求。(1)如果用fiddler模拟请求的话,请求头和请求主体的内容可以这样构造:&模拟请求之后,从返回结果可以查看到我们的请求数据:&(2)如果用HttpClient模拟post请求的话,请求可以这样构造: DefaultHttpClient client = new DefaultHttpClient();& & & & List&BasicNameValuePair&&params&=&new&ArrayList&BasicNameValuePair&(); & & & //定义键值对列表,用于存放向url发送post请求的
数据。&&&&&&&&params.add(new&BasicNameValuePair("parameter1",&"12345"));&&&&&&&&params.add(new&BasicNameValuePair("parameter2",&"23456")); & & & & & & & & & & & & & & &//向params设置数据&&&&&&&&HttpPost&post&=&new&HttpPost(""); & & & & & & & & & & & & & & & & & & & & & &//定义HttpPost对象并初始化它& &&& & & & HttpEntity&reqEntity&=&new&UrlEncodedFormEntity(params); & & & & & & & & & & & & & & & & & &//用UrlEncodedFormEntity对象包装请求体数据& & & & & & & & & & & & & & & & & & & & & &&&&&&&&&post.setEntity(reqEntity);& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &//设置post请求实体&&&&&&&&HttpResponse&response&=&client.execute(post); & & & & & & & & & & & & & & & & & & & & & & & & & & & &//发送http请求&&&&&&&&System.out.println("the&request&body&is:"+EntityUtils.toString(reqEntity)); & & & & & &//打印出请求实体&&&&&&&&System.out.println(response.getStatusLine().getStatusCode()); & & & & & & & & & & & & & & & //打印http请求返回码(二)application/json数据格式& &application/json格式的请求头是指用来告诉服务端post过去的消息主体是序列化后的 JSON 字符串。&(1)如果用fiddler模拟请求的话,请求头和请求主体的内容可以这样构造:&模拟请求之后,从返回结果可以看到我们的请求数据:&(2)如果用HttpClient模拟post请求的话,请求可以这样构造:&HttpClient&client&=&new&DefaultHttpClient(); &&&JSONObject js = new JSONObject(); & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &//定义一个JSON数据格式对象,用其保存请求主体数
据。& &js.element("parameter1", "12345"); & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &//为JSON对象的各个key值赋值& js.element("parameter2","23456");& String postRequest = js.toString();&&HttpPost&post&=&new&HttpPost(""); & & & & & & & & & & & & & & & & & & & &&&//定义HttpPost对象并初始化它& &&& StringEntity reqEntity =&new&StringEntity(js.toString()); & & & & & & & & & & & & & & & & & & & & &//用StringEntity对象包装请求体数据&reqEntity.setContentType("application/json"); & & & & & & & & & & & & & & & & & & & & & & & & & & & & //设置请求头数据传输格式&post.setEntity(reqEntity); & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & //设置post请求实体&HttpResponse&response =&client.execute(post); & & & & & & & & & & & & & & & & & & & & & & & & & & & &//发送http请求&System.out.println("the&request&body&is:"+EntityUtils.toString(reqEntity)); & & & & & & //打印出请求实体&System.out.println(response.getStatusLine().getStatusCode()); & & & & & & & & & & & & & & & //打印http请求返回码这里我们可以发现HttpClient模拟post请求时,请求头格式为application/x-www-form-urlencoded与application/json的主要差别在于请求主体的构造格式(前者是键值对,后者是JSON串)以及包装请求体数据用的方法不同(前者是UrlEncodedFormEntity,后者是StringEntity)。(三)text/xml数据格式(1)如果用fiddler模拟请求的话,请求头和请求主体的内容可以这样构造:&模拟请求之后,从返回结果可以看到我们的请求数据:&(2)如果用HttpClient模拟post请求的话,请求可以这样构造:Document&doc&=&DocumentHelper.createDocument(); & & & & & & & & & & & & & & & & & & & & & & & &//创建document对象Element&book&=&doc.addElement("book"); & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &//构建document对象各个节点book.addElement("title").addText("芈月传");book.addElement("author").addText("蒋胜男");String&body&=&book.asXML(); & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & //Document对象转成string类型StringEntity&reqEntity&=&new&StringEntity(body); & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &//用StringEntity对象包装请求体数据reqEntity.setContentType("text/xml"); & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &&//设置请求头数据传输格式reqEntity.setContentEncoding("utf-8"); & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &&//设置请求头数据编码格式HttpPost&post&=&new&HttpPost(""); & & & & & & & & & & & & & & & & & & & & & & & &&//定义HttpPost对象并初始化它& &post.setEntity(reqEntity); & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &&//设置post请求实体HttpResponse&response&=&client.execute(post); & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &&//发送http请求System.out.println("the&request&body&is:"+EntityUtils.toString(reqEntity)); & & & & & & & & & //打印出请求实体&System.out.println(response.getStatusLine().getStatusCode()); & & & & & & & & & & & & & & & & & //打印http请求返回码(四)multipart/form-data数据格式& & & & 除了传统的application/x-www-form-urlencoded表单,我们另一个经常用到的是上传文件用的表单,这种表单的类型为multipart/form-data。在HttpClient程序扩展包(HttpMime)中专门有一个类与之对应,那就是MultipartEntity类。此类同样实现了HttpEntity接口。(1)如果用fiddler模拟请求的话,请求头和请求主体的内容可以这样构造:&第一步,先设置好请求头格式,然后点击upload file...第二步,上传你的文件,这里我上传一个png的图片这是fiddler根据我们上传的文件自动调整生成的请求,在请求头中看到,我们需要选择一段数据作为“分割边界”( boundary属性),这个“边界数据”不能在内容其他地方出现,一般来说使用一段从概率上说“几乎不可能”的数据即可。每次post浏览器都会生成一个随机的30-40位长度的随机字符串,浏览器一般不会遍历这次post的所有数据找到一个不可能出现在数据中的字符串,一般都是随机生成。选择了这个边界之后,浏览器便把它放在Content-Type 里面传递给服务器,服务器根据此边界解析数据。下面的数据便根据boundary划分段,每一段便是一项数据。(每个field被分成小部分,而且包含一个value是"form-data"的"Content-Disposition"的头部;一个"name"属性对应field的ID等等,文件的话包括一个filename)模拟请求之后,从返回结果可以看到我们的请求数据:&(2)如果用HttpClient模拟post请求的话,请求可以这样构造:HttpPost&post&=&new&HttpPost(""); & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &&&//定义HttpPost对象并初始化它& &MultipartEntity&mutiEntity&=&new&MultipartEntity(); & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &//定义MultipartEntity对象File&file&=&new&File("C:\Users\hzsuixiang\Desktop\image_39.png");mutiEntity.addPart("desc",new&StringBody("网易云阅读",&Charset.forName("utf-8"))); & & & & & &//设置multiEntity对象的主体数据mutiEntity.addPart("pic",&newFileBody(file));post.setEntity(mutiEntity); & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &//设置post请求主体HttpResponse&&httpResponse&=&client.execute(post); & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &//执行post请求HttpEntity&httpEntity&=&&httpResponse.getEntity(); & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &//获得响应返回实体
综上,就是接口测试中fiddler与HttpClient模拟post接口四种请求数据的构造方法,总结起来有利于在以后的接口测试工组过程中可以及时查阅。另外,为了尽可能简化核心代码,列出的这些代码中并没有写出需要的jar包,大家使用的时候需要自行添加。&&
阅读(2043)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'接口测试中fiddler与HttpClient模拟post接口四种请求数据的构造方法',
blogAbstract:'一、背景介绍\t\t在日常的接口测试工作中,模拟接口请求通常有两种方法,fiddler模拟和HttpClient模拟。Fiddler是一个简单的http协议调试代理工具,它界面友好,易于操作,是模拟http请求的利器之一。而',
blogTag:'',
blogUrl:'blog/static/19',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:9,
permalink:'blog/static/19',
commentCount:1,
mainCommentCount:1,
recommendCount:0,
bsrk:-100,
publisherId:,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'网易杭州 QA Team\r\n\r\n\r\n\r\n务实 专注 分享 做有态度的QA',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}如何使用Fiddler测试WebApi接口?使用Fiddler测试WebApi接口的教程。点点软件园的小编告诉你如何使用Fiddler测试WebApi接口。软件名称:软件大小:1.18M下载地址:测试&WebAPI&get方法评论Execute执行结果:评论get方法查询单个评论点点软件园小编推荐:fiddler无法与手机连接是怎么回事fiddler如何捕获https会话_#如何使用Fiddler测试WebApi接口_使用Fiddler测试WebApi接口的教程②#_测试&WebAPI&post方法在请求头加上:Accept:application/xmlContent-Type:application/json评论测试&WebAPI&put方法评论测试&WebAPI&delete方法评论
您需要登录后才可以发帖
其他登录方式:fiddler+willow使用和配合真机测试调试
我的图书馆
fiddler+willow使用和配合真机测试调试
本文最早发布于csdn
背景介绍:
Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的“进出”Fiddler的数据(指cookie,html,js,css等文件,这些都可以让你胡乱修改的意思)。 Fiddler 要比其他的网络调试器要更加简单,因为它不仅仅暴露http通讯还提供了一个用户友好的格式。Fiddler是用C#写出来的,它包含一个简单却功能强大的基于JScript.NET事件脚本子系统,它的灵活性非常棒,可以支持众多的http调试任务,并且能够使用.net框架语言进行扩展。
注:Fiddler因为设置代理的原因,在使用中可能会出现网络问题,直接关闭或者点击关掉左下角的capture就好了
Fiddler及Willow插件的安装
Fiddler有两个版本,下载地址
,针对Fiddler2和Fiddler4,对应的Willow插件版本也是不一样的。本文使用和针对的主要是Fiddler4
官网介绍的主要功能如下:
Web调试,调试PC、Mac或Linux系统和移动设备的通信。确保适当的cookies,headers和缓存指令是客户端和服务器之间传输。支持任何框架,包括.NET,Java,Ruby等等。
性能测试,Fiddler让你一眼就看到加载页面权重-请求的数量和传输的字节,http缓存和压缩技术。也可以用Fiddler的自定义规则来关注潜在的性能问题.比如,你可以标记所有大于25KB的响应(Fiddler4要安装Fiddeler script)
HTTP/HTTPS流量监控,Fiddler是一个免费的web调试代理,记录了所有在你的电脑和互联网之间的HTTP(s)的流量,可以用它来调试几乎任何支持代理的应用程序比如IE,Chrome,Safari等
Web会话操作,容易操作和编辑web会话。你所需要做的就是设置一个暂停正在处理的会话和允许变更的请求/响应的断点。你也可以在Fiddler中编写自己的HTTP请求(也就是伪造请求)
安全性测试,使用Fiddler对你的web应用程序进行安全性测试——解密HTTPS流量,用man-in-the-middler解密技显示和修改请求。可以配置Fiddler解码所有流量或者特定会话的流量
定制Fiddler,受益于丰富的扩展模型,从简单的FiddlerScript到强大的扩展,可以使用任何.net语言来扩展,。
Fiddler原理:
在本机开启一个http的代理服务器,然后它会转发所有的http请求和响应到最终的服务器,如图所示打开Fiddler后,Fiddler会自动篡改代理,打开ie的internet选项-&连接-&局域网设置-&高级可以看到下图通过更改浏览器的代理服务地址,Fiddler就可以截获所有发出的请求
Fiddler两种代理模式
流模式:(streaming) 实时传送给客户端(更接近于浏览器本身真实的行为)缓冲模式: (buffering) 等http请求所有东西都准备好后才返回给应用程序(可控制最后的服务器响应)在Fiddler的工具栏的Stream可以进行两种模式的切换,默认是缓冲模式
Fiddler使用场景
开发环境host配置,Tools-&Hosts
前后端接口调试
线上bugfix,将线上项目代理到本地进行修改调试(AutoResponder,Willow)
性能分析和优化
工具栏常用功能介绍
Replay,回放会话,选中会话并按R键即可回放会话(可多条)
清空监控面板,快捷键ctrl+x
go 断点调试
stream切换代理模式
Decode 解压请求
keep all session选项可选保存会话的数量,默认的保存所有,保存的会话越多,fiddler占用的内存越大,可以设置下,而且调试也不希望看到太多会话,可以根据需要清空监控面板或过滤请求
All Process,可以用来控制如只捕获chrome浏览器的请求
Find 可以查找会话并选择颜色高亮标明
TextWizard 解码/编码功能,可选选项很多,避免去网上找解码工具
状态栏功能较少,但也很重要Capture用来控制Fiddler是否工作,点击即可切换状态All Process控制请求来源旁边的数字代表当前会话数量
select命令。选择所有相应类型(指content-type)为指定类型的HTTP请求,如选择图片,使用命令select image.而select css则可以选择所有相应类型为css的请求,select html则选择所有响应为HTML的请求,选中的部分会高亮显示,如图执行select image
allbut命令。allbut命令用于选择给定类型的HTTP请求(删除其他类型请求),该命令还有一个别名keeponly.
Eg:只保留image会话:allbut image
text命令选择所有 URL 匹配问号后的字符的全部 session
Eg:?qq.com
小于/大于size命令选择响应大小大于某个大小或者小于某个大小的所有HTTP请求
Eg:选择响应大小小于10k的请求:&10k
=status命令选择响应状态等于给定状态的所有HTTP请求。
Eg:选择所有状态为200的HTTP请求:=200
@host命令选择包含指定 HOST 的全部 HTTP请求。
Eg:选择所有host包含csdn.net的请求:@csdn.net
Bpafter, Bps, bpv, bpm, bpu
这几个命令主要用于批量设置断点
Bpafter xxx: 中断 URL 包含指定字符的全部 session 响应
Bps xxx: 中断 HTTP 响应状态为指定字符的全部 session 响应。
Bpv xxx: 中断指定请求方式的全部 session 响应
Bpm xxx: 中断指定请求方式的全部 session 响应。等同于bpv xxx
Bpu xxx:与bpafter类似。
当这些命令没有加参数时,会清空所有设置了断点的HTTP请求。
help输入help会弹出这个页面 ,是fiddler的官方命令行文档
会话图标类型(此图为Fiddler2)
右侧窗口功能
Stastics:统计选中的一个或多个请求相关数据,大小、耗时
最下方会有一个不太容易发现的功能show charts,点击会对请求进行可视化处理,如图
Inspectors:多种方式查看Request或者Response的详细消息,如图:
AutoResponder: 设置一些规则将符合规则的请求重定向到本地。
Composer:创建发送HTTP请求/前后端接口联调
Filters:设置会话过滤规则
Timeline:性能优化和分析
Willow的使用:请求重定向(模拟响应)
右键添加项目,规则,host
注意:Match中的URL必须以"/"结尾,Action中的URL必须以"\"结尾
其他使用:
Fiddeler+Willow+全民wifi 配合真机调试
确保fiddler相关选项勾选如下,tools-&fiddler options -&connections
这里默认的只会抓取HTTP请求包,如果也要抓取HTTPS包,则在HTTPS标签栏里设置,把Capture HTTPS CONNECTs选项
2.确保capture开启,我的fiddler有时候会出现这种情况
此时capture会关闭,需要点击黄色区域才能重新开启capture,不然无法抓到请求
3.手机和电脑连接在同一个局域网中,全民wifi插入电脑USB口(我用过360随身wifi等其他设备,因为公司网络设置的原因都不行)。如果是第一次使用全民wifi,会有提示下载驱动,成功安装驱动后会在电脑右下角提示安装成功和开始体验。电脑右下角出现全民wifi图标,可以通过手机扫描二维码或者在手机端wifi设置里面直接输入帐号密码来连接共享pc网络,接着配置代理,一般fiddler默认的端口是8888,如有不同可以在connection中查看,配置主机名,两种方法:
方法一:windows下是win+r
接着运行ipconfig
![](1.z0./4.png)
方法二:鼠标移上fiddler右上角的online会出现提示如下:
![](1.z0./5.png)
4.创建重定向规则,如果文件较少,可以用fiddler自带的AutoResponsder,如果是文件夹,就用willow添加,因为手q使用了离线包机制吗,所以willow要配置host禁用离线包并在手机端清除qq缓存,右键会出现添加项目规则host等的工具栏
配置host如图
5.开始抓包,打开项目对应的区域,抓到的请求在fiddler里面会是橙色区域如图即代表抓包成功,有时候会出现404或者代码报错,所以一般要先在浏览器端测试观察控制台有没有报错如果发现404,可能是因为使用了不同的域名,也要进行添加规则和匹配
6.浏览器端的调试如下:复制抓到的请求地址,在浏览器端打开即可,如果要调试一个项目下另外的业务,更改url结构即可
我遇到过因为需要看外网的情况关闭了手机的代理后再开结果无法抓包的问题,重启手机就好了,有时候请求很多有很多不想看的请求需要观察当前的业务时,可以设置filter
过滤掉请求后点击action选择run filterset now即可生效
7.清空面板方法如下:方法一:在命令窗口里输入clear即可方法二:上方有移除请求的选项点击会有很多选项,可以移除所有请求,移除img请求和移除请求码为非200的等等,根据实际需要选择不同选项方法三:清除所有记录的快捷键:ctrl+x
一般调试的时候都要禁用缓存在fiddler2里是Tools-&Performance-&Disable Caching,在fiddler4里是Rules-&Performance-&Disable Caching
Fiddler的高级使用
我们为什么要限速。限速对于web前端研发是非常重要的,由于开发者的机器一般配置都很高,并且是在localhost下来调试程序,所以很难模拟到用户的真实使用情 况,如正在下载JS,css等静态资源的时候,页面的一个渲染情况。当网速很慢的时候,我们更希望看到的是先渲染出用户界面,而不是让用户看到一片空白。那么这个时候,网络限速就能很方便在localhost针对类似的情况来做性能调试与优化。
方法一:Fiddler script(自定义延时)需要的插件:Fiddler script,下载地址:下载完直接安装就行了,安装之前必须关闭fiddler,再打开fiddler就会在右侧tab看到fiddler script选项fiddler script原理:把请求完全代码化Eg:模拟延时3s发送请求:选中会话,在fiddler-script——&Go to-&OnBeforeRequest添加代码如下:oSession["request-trickle-delay"] = "3000"点击save script保存,再replay会话就会发现会话延迟了三秒才发送延时响应同理
方法二:Rules → Performances → Simulate Modem Speeds
Fiddler替换HTTP Request Host替换的方法有两种,一种是暂时的,一种是永久的,暂时的方法是在Fiddler 左下角输入:
urlreplace
要清除转发,请在同一位置输入:
urlreplace
按Enter 就可以了。
更详细的说明请参考Fiddler官方说明文件- QuickExec Reference 。 可以发现urlreplace 做的是整个网址字串的取代,所以可以动手脚的地方不只于此。
永久的方法是修改Fiddler的CustomRules.js ,注意是.js ! 点下Fiddler 上方的Rules ,再点Customize Rules :
如果有安装FiddlerScript Editor ,会用FiddlerScript Editor开启CustomRules.js ,否则会用笔记本开启。 或者也可以到「我的文件 Fiddler2 Scripts 」直接编辑CustomRules.js 。
//请先在CustomRules.js 找到:
static function OnBeforeRequest ( oSession : Session ) {
//在函式中加入:
if ( oSession . HostnameIs ( '' ) )
oSession . hostname = 'www.' ;
将CustomRules.js 存档, Fiddler 会自动重新载入CustomRules.js ,原先发到 的HTTP Request 就会自动转发到www. 。更详细的说明请参考Fiddler官方说明文件- Script Samples 。
Fiddler断点调试
设置断点有两种方法第一种:打开Fiddler 点击Rules-& Automatic Breakpoint -&Before Requests(这种方法会中断所有的会话)如何消除命令呢? 点击Rules-& Automatic Breakpoint -&Disabled
第二种: 在命令行中输入命令: bpu
(这种方法只会中断)
如何消除命令呢? 在命令行中输入命令 bpu
看个实例,模拟QQ邮箱的登录,输入错误的用户名和密码,用Fiddler中断会话,修改成正确的用户名密码。这样就能成功登录
登录qq邮箱,输入错误的密码
打开Fiddler, 在命令行中输入bpu
输入错误的用户名和密码 点击登录
Fiddler 能中断这次会话,选择被中断的会话,点击Inspectors tab下的WebForms tab 修改用户名密码,然后点击Run to Completion。
结果是正确地登录了qq邮箱
两种方法,一种暂时的,一种永久的(通过fiddler script)暂时的方法:Tools-&Performance-&Disable Caching
永久的方法:
在fiddler script里查找
& var m_DisableCaching: boolean =
把值改成true并保存就可以了
扩展Fiddler script的一些用法
实例 让所有qq的会话都显示红色。
把这段脚本放在OnBeforeRequest(oSession: Session) 方法下,并且点击"Save script"
if (oSession.HostnameIs("")) {
oSession["ui-color"] = "red";
效果如图这样所有的cnblogs的会话都会显示红色
如何在Fiddler Script中修改Cookie
cookie其实就是request 中的一个header.
// 删除所有的cookie
oSession.oRequest.headers.Remove("Cookie");
// 新建cookieoSession.oRequest.headers.Add("Cookie", "username=testpassword=P@ssword1");
注意: Fiddler script不能直接删除或者编辑单独的一个cookie, 你需要用replace方法或者正则表达式的方法去操作cookie的string
static function OnBeforeRequest(oSession: Session)
if (oSession.HostnameIs('') &&
oSession.uriContains('pagewithCookie') &&
oSession.oRequest.headers.Contains("Cookie"))
var sCookie = oSession.oRequest["Cookie"];
用replace方法或者正则表达式的方法去操作cookie的string
sCookie = sCookie.Replace("cookieName=", "ignoreme=");
oSession.oRequest["Cookie"] = sC
一点小的tips:
我在使用Fiddler的过程中碰到过无法抓包的情况,原因是之前因为测试配置了autoresponder或者filter等没有改回去,如果碰到这个情况请确保Fiddler的选项都配置正确
chrome和firefox浏览器无法被监听fiddler安装之后,默认会在IE浏览器中安装一个fiddler的插件,所以它对IE及国内基于IE内核的各类浏览器都能实现监听,但其他内核的浏览器无法被监听。
解决办法:禁用chrome和firefox中具有代理功能的插件,比如chrome如果安装了switchSharp,禁用它或选择“使用系统代理设置”,或在switchSharp中新配置一个代理项(比如名为fiddler,用于指向代理127.0.0.1,端口8888,如下图),即可实现监听。
TA的最新馆藏[转]&
喜欢该文的人也喜欢}

我要回帖

更多关于 fiddler 查看接口 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信