Skip to content
avenwu.wwb edited this page Jul 12, 2016 · 90 revisions

以下功能只有最新版本的whistle才能保证全部支持,建议老版本用户及时升级到最新版本,如何升级,请参考: 更新whistle

whistle 可以用于查看http[s]、ws[s]请求,更有强大的配置功能; whistle 把对请求的操作抽象成一个个 uri (每种功能对应一个协议、每个操作对应该协议的一个uri),所以通过类似传统hosts的简单配置即可实现对请求的操作,支持更灵活的匹配方式(域名、路径,正则),只需记住请求url的某个关键字即可设置匹配;可以做本地替换(支持jsonp请求的替换),请求替换,修改请求头、响应头,请求参数,注入内容,限制速度,设置代理,并集成了weinre用于调试移动端页面,且通过log协议,可以自动捕获手机端或ie6、7浏览器的js错误,且可以自动注入自定义脚本,调用console对象的各个方法调试js(ie6、7也支持),whistle 会把捕获到的错误及用户手动输出的错误输出到 whistle 的Network页面右侧的log标签页中等等丰富的功能,具体参考下面列表:

Note: 配置的注释跟hosts的配置的注释一样都是使用 # ,对https、ws、wss需要开启https拦截功能才能对上述所有功能生效,否则对这三种请求,只有host、proxy、socks三种协议生效,如何开启https拦截,请求参考: 启用HTTPS

目录

  1. host (设置hosts)
  2. req (修改请求属性)
  3. rule (设置响应规则)
  4. res (修改响应属性)
  5. weinre (设置weinre,调试手机页面)
  6. filter (过滤规则,隐藏请求等)
  7. disable (禁用缓存、cookie等)
  8. log (打印网页js错误或者调试信息)
  9. exports (导出请求数据到指定文件)
  10. exportsUrl (把请求的url列表按顺序导出到指定文件)
  11. hostname (把请求的host字段)
  12. referer (修改请求referer)
  13. auth (修改请求用户名密码)
  14. ua (修改请求user-agent)
  15. etag (修改请求头部的etag)
  16. urlParams (修改请求url的参数)
  17. dispatch (动态修改请求url的参数)
  18. params (修改请求参数)
  19. statusCode (直接响应)
  20. replaceStatus (替换后台的响应状态码)
  21. redirect (302重定向)
  22. method (修改请求方法)
  23. cache (修改缓存策略)
  24. attachment (设置下载头部)
  25. location (设置响应头部的location字段)
  26. accept (修改请求头的accept)
  27. reqDelay (延迟请求)
  28. resDelay (延迟响应)
  29. reqSpeed (限制请求速度)
  30. resSpeed (限制响应速度)
  31. reqType (修改请求类型)
  32. resType (修改响应类型)
  33. reqCharset (修改请求的编码)
  34. resCharset (修改响应的编码)
  35. reqCookies (修改请求cookies)
  36. resCookies (修改响应cookies)
  37. reqCors (修改请求cors)
  38. resCors (修改响应cors)
  39. reqHeaders (修改请求头)
  40. resHeaders (修改响应头)
  41. reqPrepend (往请求内容前面添加数据)
  42. resPrepend (往响应内容前面添加数据)
  43. reqBody (替换请求内容)
  44. resBody (替换响应内容)
  45. reqAppend (往请求内容后面追加数据)
  46. resAppend (往响应内容后面追加数据)
  47. reqReplace (通过正则或字符串替换请求文本内容,类似str.replace)
  48. resReplace (通过正则或字符串替换响应文本内容,类似str.replace)
  49. reqWrite (将请求内容写入指定的文件)
  50. resWrite (将响应内容写入指定的文件)
  51. reqWriteRaw (将请求的完整内容写入指定的文件)
  52. resWriteRaw (将响应的完整内容写入指定的文件)
  53. css (往响应为html或css的内容后面追加数据)
  54. html (往响应为html的内容后面追加数据)
  55. js (往响应为html或js的内容后面追加数据)

下面各种协议的配置模式,除了 请求替换 以外,都可以采用下面三种配置模式(如果请求替换是采用正则匹配方式,也可以采用下面的三种模式):

# 普通模式
pattern operator-uri

# 兼容模式
operator-uri pattern

# 组合模式
operator-uri pattern1 pattern2 ... patternN

host

兼容传统的hosts配置模式(这种配置模式对所有下面域名的请求都生效,非默认端口号也生效):

# 普通模式
www.example.com 127.0.0.1 
# 等价于(一对一的配置,两边位置可以对调)
127.0.0.1 www.example.com

# 组合模式(位置不能调换)
127.0.0.1 www.example1.com www.example2.com:8888 www.examplen.com 
# 等价于:
127.0.0.1 www.example1.com
127.0.0.1 www.example2.com:8888
127.0.0.1 www.examplen.com

# 上述三种配置模式,同样适用于下述配置

# 也可以限制域名的端口号,只对该域名的8888端口请求生效
www.example.com:8888 127.0.0.1

# 也可以限制域名的协议,只对该域名的http请求生效
http://www.example.com 127.0.0.1


# 对默认端口号的限制,只对默认端口生效(http、ws的80端口,https、wss的433端口)
www.example.com/ 127.0.0.1

# 也可以协议和端口号一起限制
http://www.example.com:8888 127.0.0.1

路径匹配:

# 对该路径及该路径下所有子路径的http[s]、ws[s]请求都生效
www.example.com/xxx 127.0.0.1
www.example.com/xxx?yyy 127.0.0.1

# 也同样可以限制某个协议
http://www.example.com/xxx 127.0.0.1

# 限制端口号
www.example.com:8888/xxx 127.0.0.1

# 限制协议及端口号
http://www.example.com:8888/xxx 127.0.0.1

正则匹配:

# 匹配所有请求
/./ 127.0.0.1

# 匹配包含某个关键字的请求
/whistle/ 127.0.0.1

# 子匹配,这里用不到,后面讲其它协议都可以用到

下面功能同样适用上述三种匹配方式及三种配置模式,为方便描述,后面只以 域名匹配方式普通配置模式 为例描述协议的功能(并在req统一给出如何使用 子匹配 的例子),其它方式及模式同理可得。

req

用于操作请求发送的头、内容、方法、速度等。

配置模式:

# 把操作内容放在本地文件(windows)
www.example.com req://D:/workspace/test.txt
# 或(在windows路径分隔符可以用 `/` 及 `\`,两个是等价的)
www.example.com req://D:\workspace\test.txt
# max 或 linux(注意协议与内容之计有三条斜杠)
www.example.com req:///User/xxx/workspace/test.txt


# 把操作内容放在whistle的values系统
www.example.com req://{test.txt}

如何操作values系统,参考: values

test.txt可以有如下功能(后面会提供一系列协议,把这里面的一些常用功能拆出来,方便使用):

{
 	"method": "post",
	"headers": {
    	"referer": "http://www.example.com/xxx"
	},
	"top": "preappend body",
	"prepend": "/User/xxx/top.txt",
	"body": "request body",
	"replace": "/User/xxx/body.txt",)
	"bottom": "append body",
	"append": "/User/xxx/bottom.txt",
	"delay": 6000,
	"speed": 20,
	"timeout": 36000,
	"charset": "utf8"
}

如果不修改headers,也可以采用行写法(详细参考JSON格式):

method: post
top: /User/xxx/top.txt
prepend: path
body: request body
replace: /User/xxx/body.txt
bottom: append body
append: /User/xxx/bottom.txt
delay: 6000
speed: 20
timeout: 36000
charset: "utf8"

Note: :空格 分隔符为冒号+空格

也可以采用下面这种inline

www.example.com req://method=post&top=%2FUser%2Fxxx%2Ftop.txt
# 或
req://method=post&top=%2FUser%2Fxxx%2Ftop.txt www.example.com

# 或
www.example.com req://&method=post&top=/User/xxx/top.txt

其中:

  • method: 替换请求的方法(不区分大小写),如:post、get等
  • headers: 替换请求头(增量的方式):whistle会把配置里面的字段一一替换请求头
  • top: 往请求内容的顶部注入该字段的文本内容
  • prepend: 功能同 top ,区别是这个字段对应的是文本文件的路径
  • body: 用该字段的文本替换请求内容
  • replace: 同 body ,区别是这个字段对应的是文本文件的路径
  • bottom: 往请求内容的底部部注入该字段的文本内容
  • append: 同 bottom ,区别是这个字段对应的是文本文件的路径
  • delay: 延迟请求的毫秒数
  • speed: 请求速度(单位:kb/s,千比特/每秒),只对有内容的请求生效(如:post等)
  • timeout: 对单个请求指定超时(可以不设置,系统有默认的超时时间,也可以在启动时统一修改)
  • charset: 指定编码,默认为 utf8 ,一般不用指定,如果发现有乱码再设置页面对应的编码

更多内容请参考:匹配方式配置模式JSON格式

rule

用于修改整个请求数据的来源,如:转发到其它域名路径、本地文件替换、替换本地模板文件、代理到其它代理服务器、如果这些还不能满足需求,也可以自定义协议进行扩展,比如我们部门内部用的开发环境 aeproxy 就是拓展了两协议 tianma:alienv:集成了公司内部的一个本地调试的前端静态服务,安全原因这个项目不能开源。

请求替换

端口转发

www.example.com www.example.com:8888
www.qq.com:8888 www.qq.com

2). 请求转发

www.example.com www.qq.com
http://www.baidu.com https://www.baidu.com

更多内容请参考:匹配方式配置模式

file

替换本地目录或文件,请求会自动补全路径,替换对应目录里面的文件:

# windows
www.example.com file://D:/workspace/dir 
# 也可以 
www.example.com file://D:\workspace\dir 

# 其它
www.example.com file:///User/workspace/dir


# 也可以同时配置多个目录,whistle会自动遍历,直到找到为止,分隔符为:`|`
www.example.com file:///User/workspace/dir1|/User/workspace/dir2|/User/workspace/dirN|/User/workspace/dirN/index.html

更多内容请参考:匹配方式配置模式

xfile

xfilefile 的功能一样,都是用来替换本地文件或目录,区别是:xfile 如果在本地找不到,会自动请求线上的资源

# windows
www.example.com xfile://D:/workspace/dir 
# 也可以 
www.example.com xfile://D:\workspace\dir 

# 其它
www.example.com xfile:///User/workspace/dir


# 也可以同时配置多个目录,whistle会自动遍历,直到找到为止,分隔符为:`|`
www.example.com xfile:///User/workspace/dir1|/User/workspace/dir2|/User/workspace/dirN|/User/workspace/dirN/index.html

更多内容请参考:匹配方式配置模式

rawfile

替换本地目录或http响应内容格式的文件(可以与resWriteRaw配合使用),请求会自动补全路径,替换对应目录里面的文件:

# windows
www.example.com rawfile://D:/workspace/dir 
# 也可以 
www.example.com rawfile://D:\workspace\dir 

# 其它
www.example.com rawfile:///User/workspace/dir


# 也可以同时配置多个目录,whistle会自动遍历,直到找到为止,分隔符为:`|`
www.example.com rawfile:///User/workspace/dir1|/User/workspace/dir2|/User/workspace/dirN|/User/workspace/dirN/index.html

更多内容请参考:匹配方式配置模式

xrawfile

xrawfilerawfile 的功能一样,都是用来替换本地http响应内容格式的文件或目录,区别是:xrawfile 如果在本地找不到,会自动请求线上的资源

# windows
www.example.com xrawfile://D:/workspace/dir 
# 也可以 
www.example.com xrawfile://D:\workspace\dir 

# 其它
www.example.com xrawfile:///User/workspace/dir


# 也可以同时配置多个目录,whistle会自动遍历,直到找到为止,分隔符为:`|`
www.example.com xrawfile:///User/workspace/dir1|/User/workspace/dir2|/User/workspace/dirN|/User/workspace/dirN/index.html

更多内容请参考:匹配方式配置模式

tpl

tplfile 的功能一样,都是用来替换本地文件,区别是:tpl 会解析url里面的请求参数成JSON对象,并自动替换文本里面的 {name} 占位符,这个可以用来构造 jsonp 请求数据。

# windows
www.example.com tpl://D:/workspace/dir 
# 也可以 
www.example.com tpl://D:\workspace\dir 

# 其它
www.example.com tpl:///User/workspace/dir


# 也可以同时配置多个目录,whistle会自动遍历,直到找到为止,分隔符为:`|`
www.example.com tpl:///User/workspace/dir1|/User/workspace/dir2|/User/workspace/dirN|/User/workspace/dirN/index.html

test.txt

{callback}({ec: 0})

更多内容请参考:匹配方式配置模式

xtpl

xtpltpl 的功能一样,都是用来替换本地文件或目录,区别是:xtpl 如果在本地找不到,会自动请求线上的资源

# windows
www.example.com xtpl://D:/workspace/dir 
# 也可以 
www.example.com xtpl://D:\workspace\dir 

# 其它
www.example.com xtpl:///User/workspace/dir


# 也可以同时配置多个目录,whistle会自动遍历,直到找到为止,分隔符为:`|`
www.example.com xtpl:///User/workspace/dir1|/User/workspace/dir2|/User/workspace/dirN|/User/workspace/dirN/index.html

test.txt

{callback}({ec: 0})

更多内容请参考:匹配方式配置模式

proxy

把请求代理到其它http代理服务器(如:fiddler、charles等)。

# 把 www.example.com 的请求代理到本机的Fiddler或Charles 
www.example.com proxy://127.0.0.1:8888
# 也可以直接用域名的方式
www.example.com proxy://www.httpproxy.com:8888

更多内容请参考:匹配方式配置模式

socks

把请求代理的socks代理服务器。

# 把请求代理到socksv5服务器
www.example.com socks://www.socksproxy.com:1080
#如果需要用户名和密码
www.example.com socks://user1:pass1|user2:pass2|userN:[email protected]:1080

更多内容请参考:匹配方式配置模式

自定义

v0.8.0及以上版本,支持通过安装node模块的方式动态添加插件,请升级到最新版本,插件的使用与开发参考:自定义插件

这部分有疑问直接加群,人工解答:462558941

res

用于操作请求响应的头、内容、状态码、速度等。

配置模式:

# 把操作内容放在本地文件(windows)
www.example.com res://D:/workspace/test.txt
# 或(在windows路径分隔符可以用 `/` 及 `\`,两个是等价的)
www.example.com res://D:\workspace\test.txt
# max 或 linux(注意协议与内容之计有三条斜杠)
www.example.com res:///User/xxx/workspace/test.txt


# 把操作内容放在whistle的values系统
www.example.com res://{test.txt}

如何操作values系统,参考: 界面操作

test.txt可以有如下功能(后面会提供一系列协议,把这里面的一些常用功能拆出来,方便使用):

{
 	"statusCode": "500",
	"headers": {
    	"content-type": "text/plain; charset=utf8"
	},
	"top": "preappend body",
	"prepend": "/User/xxx/top.txt",
	"body": "request body",
	"replace": "/User/xxx/body.txt",)
	"bottom": "append body",
	"append": "/User/xxx/bottom.txt",
	"delay": 6000,
	"speed": 20
}

如果不修改headers,也可以采用行写法(详细参考JSON格式):

statusCode: post
top: /User/xxx/top.txt
prepend: path
body: request body
replace: /User/xxx/body.txt
bottom: append body
append: /User/xxx/bottom.txt
delay: 6000
speed: 20

Note: :空格 分隔符为冒号+空格

其中:

  • statusCode: 修改响应状态码,如果设置了statusCode,请求将不会发送到对应的服务器,whistle将直接按状态码响应后返回给浏览器,利用此功能可以用来模拟 4xx、5xx等响应
  • headers: 修改响应头
  • top: 往响应内容的顶部注入该字段的文本内容
  • prepend: 功能同 top ,区别是这个字段对应的是文本文件的路径
  • body: 用该字段的文本替换响应内容
  • replace: 同 body ,区别是这个字段对应的是文本文件的路径
  • bottom: 往响应内容的底部部注入该字段的文本内容
  • append: 同 bottom ,区别是这个字段对应的是文本文件的路径
  • delay: 延迟响应的毫秒数
  • speed: 响应速度(单位:kb/s,千比特/每秒),只对有内容的请求生效(如:post等)

更多内容请参考:匹配方式配置模式JSON格式

weinre

weinre 主要用于调试移动端的网页,可以通过pc操作移动端网页,详细请参考: weinre,或者直接找度娘。

如何使用weinre:

  1. 配置手机代理:先把手机的请求代理到whistle,ip为whistle所在机器的ip,端口号为whistle的监听的端口号(默认为:8899)

  2. 配置要注入的请求(系统会自动判断是否为html,如果不是则不会自动注入):

     # xxx为对应的weinre id,主要用于页面分类,方便weinre查找,默认为anonymous
     www.example.com weinre://xxx  
    
  3. 手机打开配置的页面,然后点击 network 页面顶部操作栏的 Weinre 按钮,在下拉列表就可以找到设置的weinre id的,点击会新开一个weinre调试页面,可以开始使用weinre

  4. 手机调试或者远程访问时,可能会因为whistle所在机器的防火墙设置,导致无法远程访问,可以通过设置白名单,或者关闭防火墙:http://jingyan.baidu.com/article/870c6fc317cae7b03ee4be48.html

更多内容请参考:匹配方式配置模式界面操作

filter

filter主要用来对某些请求做禁用工作的,可以把配置的协议禁用掉,或把禁用https拦截。

# 禁用拦截https(某些https请求需要客户端证书,对这类请求无法使用https拦截)
wwww.example.com filter://intercept

# 禁用配置的host
wwww.example.com filter://host

# 隐藏匹配的请求,功能和菜单栏的Filter相反,后者是显示匹配的请求
wwww.example.com filter://hide

# 也可以同时禁用一系列配置
www.example.com filter://intercept|host|weinre|req|res

更多内容请参考:匹配方式配置模式

disable

用来禁用cache、cookie、ua、referer、csp、timeout、301、intercept、dnsCache、keepAlive。

# 禁用请求的缓存,只要经过代理且匹配到的请求都不会使用缓存
# 跟 cache 协议的区别是,cache 只是用来设置响应的缓存头
wwww.example.com disable://cache

# 禁用请求和响应的cookie
wwww.example.com disable://cookie # 也可以写成复数形式cookies

# 只禁用请求的cookie
wwww.example.com disable://reqCookie # 也可以写成复数形式reqCookies

# 只禁用响应的cookie
wwww.example.com disable://resCookie # 也可以写成复数形式reqCookies

# 删除ua
wwww.example.com disable://ua

# 删除referer
wwww.example.com disable://referer

# 删除csp策略
wwww.example.com disable://csp

# 禁用timeout,默认情况下whistle对每个请求如果36s内没有发生数据传输,会认为请求超时
wwww.example.com disable://timeout

# 把301转成302,防止cache
wwww.example.com disable://301

# 禁用https拦截,与filter://intercept相同
wwww.example.com disable://intercept

# 不缓存远程的dns(通过whistle配置的host是不会缓存),主要用于测试网页的极端情况的加载速度
wwww.example.com disable://dnsCache

# 禁用代理服务器请求链接复用
wwww.example.com disable://keepAlive

# 删除请求头 `x-requested-with`
wwww.example.com disable://ajax

# 也可以同时禁用多个
www.example.com disable://cache|cookie|ua|referer|csp|timeout|301|intercept|dnsCache|keepAlive

更多内容请参考:匹配方式配置模式

log

可以用来自动监控html页面或js文件出现的错误,这些错误会自动打印在whistle界面的log平台,还可以自动嵌入自定义的脚本调试页面,脚本可以直接调用console的各个方法,不会有兼容性问题。

支持的console方法有: console.log, console.debug, console.info, console.warn. console.error, console.fatal。

手机端和pc都需要提前设置好代理,规则配置如下:

# 把操作内容放在本地文件(windows)
www.example.com log://D:/workspace/test.js
# 或(在windows路径分隔符可以用 `/` 及 `\`,两个是等价的)
www.example.com log://D:\workspace\test.js
# max 或 linux(注意协议与内容之计有三条斜杠)
www.example.com log:///User/xxx/workspace\test.js


# 把操作内容放在whistle的values系统
www.example.com log://{test.js}

Note:test.js为自定义脚本,whistle会自动注入到相应请求

whistle会自动判断是html还是js请求,如果是html则会自动把监听脚本及自定义脚本放在html最前面,用户可以通过监听html页面的加载事件决定什么时候执行自定义脚本的方法;如果是js页面会把监听脚本放在js文件的前面,自定义脚本放在js文件的最后面。

如何操作values系统,参考: 界面操作

更多内容请参考:匹配方式配置模式

exports

用于把请求导出到指定文件(如果该文件不存在,则会自动创建):

# 把所有的请求数据导出到指定文件(windows)
/./ exports://D:/workspace/test.txt
# 或(在windows路径分隔符可以用 `/` 及 `\`,两个是等价的)
/./ exports://D:\workspace\test.txt
# max 或 linux(注意协议与内容之计有三条斜杠)
/./ exports:///User/xxx/workspace\test.txt

# 也可以指定域名或路径、或通过正则来决定导出哪些数据
www.example.com exports:///User/xxx/workspace\test.txt
www.example.com/test exports:///User/xxx/workspace\test.txt
/example/i exports:///User/xxx/workspace\test.txt

每一行都是如下json对象(第一行可能为空):

{
	startTime: '请求的开始时间',
	dnsTime: 'dns结束时间',
	requestTime: '请求结束时间',
	responseTime: '开始响应的时间',
	endTime: '响应结束的时间',
	url: '请求的url',
	realUrl: '实际请求的url(一般设置了替换规则,才会有realUrl,否则不会显示该字段)',
	method: '请求使用的方法', 
	httpVersion: 'http版本号',
    clientIp: '用户ip',
    hostIp: '服务器ip',
    reqError: '是否请求阶段出错',
    reqSize: '请求内容的长度',
	reqHeaders: '请求头',
	reqTrailers: '请求的trailers',
	statusCode: '响应状态码',
	resError: '是否在响应阶段出错',
	resSize: '响应内容的长度',
	resHeaders: '响应头',
	resTrailers: '响应的trailers',
	rules: '匹配到的规则'
}

Note: 如果想把请求或响应的内容写入本地,可以使用 reqWriteresWrite

更多内容请参考:匹配方式配置模式

exportsUrl

用于把请求的url列表按顺序导出到指定文件(如果该文件不存在,则会自动创建):

# 把所有的请求的url导出到指定文件(windows)
/./ exportsUrl://D:/workspace/test.txt
# 或(在windows路径分隔符可以用 `/` 及 `\`,两个是等价的)
/./ exportsUrl://D:\workspace\test.txt
# max 或 linux(注意协议与内容之计有三条斜杠)
/./ exportsUrl:///User/xxx/workspace\test.txt

# 也可以指定域名或路径、或通过正则来决定导出哪些数据
www.example.com exportsUrl:///User/xxx/workspace\test.txt
www.example.com/test exportsUrl:///User/xxx/workspace\test.txt
/example/i exportsUrl:///User/xxx/workspace\test.txt

每一行对应请求的url(第一行可能为空):

Note: 如果想把请求或响应的内容写入本地,可以使用 reqWriteresWrite

更多内容请参考:匹配方式配置模式

hostname

直接修改请求头的 host(修改请求头的host只能用改协议,其它都无效):

www.example.com:8080 hostname://www.example.com

更多内容请参考:匹配方式配置模式

referer

直接修改请求头的 referer,这个是设置 req 头字段的快捷方式,优先级会高于在 req.headers 设置的referer。

www.example.com referer://http://www.test.com/

更多内容请参考:匹配方式配置模式

auth

直接修改请求头的 authorization,这个是设置 req 头字段的快捷方式,优先级会高于在 req.headers 设置的authorization。

# 把操作内容放在本地文件(windows)
www.example.com auth://D:/workspace/test.txt
# 或(在windows路径分隔符可以用 `/` 及 `\`,两个是等价的)
www.example.com auth://D:\workspace\test.txt
# max 或 linux(注意协议与内容之计有三条斜杠)
www.example.com auth:///User/xxx/workspace/test.txt


# 把操作内容放在whistle的values系统
www.example.com auth://{test.txt}

如何操作values系统,参考: 界面操作

test.txt可以有如下功能(后面会提供一系列协议,把这里面的一些常用功能拆出来,方便使用):

{
 	"username": "myusername",
	"password": "mypassword"
}

也可以采用行写法(详细参考JSON格式):

username: myusername
password: mypassword

Note: :空格 分隔符为冒号+空格

更多内容请参考:匹配方式配置模式JSON格式

ua

直接修改请求头的 user-agent,这个是设置 req 头字段的快捷方式,优先级会高于在 req.headers 设置的user-agent。

www.example.com ua://Mozilla/5.0

更多内容请参考:匹配方式配置模式

etag

直接修改请求头的 etag,这个是设置 req 头字段的快捷方式,优先级会高于在 req.headers 设置的etag。

www.example.com etag://xxx

更多内容请参考:匹配方式配置模式

urlParams

同下面的 paramsurlParams 用于修改或追加url请求参数,如果是get请求,则 params 会覆盖 urlParams 的相同字段。

# 把操作内容放在本地文件(windows)
www.example.com urlParams://D:/workspace/test.txt
# 或(在windows路径分隔符可以用 `/` 及 `\`,两个是等价的)
www.example.com urlParams://D:\workspace\test.txt
# max 或 linux(注意协议与内容之计有三条斜杠)
www.example.com urlParams:///User/xxx/workspace/test.txt


# 把操作内容放在whistle的values系统
www.example.com urlParams://{test.txt}

Note: 这个会展示在 OverviewUrl 里面

dispatch

某些情况需要我们根据用户的ip、或ua、或cookie等来动态决定匹配规则,这时可以利用 dispatch 来执行自定义脚本来修改url里面的请求参数从而修改请求的url,最后达到修改请求url匹配的规则的目的。

# 配置规则
/test=1/  operator-uri
/test=2/  operator-uri
/test=3/  operator-uri

# 配置dispatch
www.example.com dispatch://D:/workspace/test.js
# 或(在windows路径分隔符可以用 `/` 及 `\`,两个是等价的)
www.example.com dispatch://D:\workspace\test.js
# max 或 linux(注意协议与内容之计有三条斜杠)
www.example.com dispatch:///User/xxx/workspace/test.js


# 把操作内容放在whistle的values系统
www.example.com dispatch://{test.js}

test.js内容:

var ua = headers['user-agent'];
if (/iphone/i.test(ua)) {
	params.test=1;
} else if (/android/i.test(ua)) {
	params.test=2;
} else {
	params.test=3;
}

whistle会自动加载test.js的脚本,并把如下对象作为context传进来:

var context = {
					url: //请求url,
					method: //请求方法, 
					httpVersion: //请求http版本,
		            ip: //请求客户端的ip,
		            headers: //请求的头部,
		            params: //请求参数,可以动态修改
			};	

如何操作values系统,参考: 界面操作

更多内容请参考:匹配方式配置模式JSON格式

params

修改请求参数,如果是get请求,则会自动修改url里面的请求参数;如果是表单或ajax的post,则会自动修改请求内容里面的参数。

# 把操作内容放在本地文件(windows)
www.example.com params://D:/workspace/test.txt
# 或(在windows路径分隔符可以用 `/` 及 `\`,两个是等价的)
www.example.com params://D:\workspace\test.txt
# max 或 linux(注意协议与内容之计有三条斜杠)
www.example.com params:///User/xxx/workspace/test.txt


# 把操作内容放在whistle的values系统
www.example.com params://{test.txt}

如何操作values系统,参考: 界面操作

test.txt可以有如下功能(后面会提供一系列协议,把这里面的一些常用功能拆出来,方便使用):

{
 	"name1": "value1",
	"name2": "value2",
	"num": 1,
	"bool": true
}

也可以采用行写法(详细参考JSON格式):

name1: value1
name2: value2
num:   1
bool: true

替换上传表单:

上传表单的内容分为两部分,正常的表单字段和上传的文件:

配置方式同上

test.txt:

{
 	"name1": "value1",
	"name2": "value2",
	"file1": {
		"filename": "text.txt",
		"content": "xxxxxxxxxxxxxxx"
	}
}
  1. 替换正常的表单自动
  2. 替换上传的文件内容及文件名
  3. 如果没有对应的字段,则会自动生成设置的字段

Note: :空格 分隔符为冒号+空格

更多内容请参考:匹配方式配置模式JSON格式

statusCode

直接响应请求,与 res.statusCode 功能一样,优先级高于后者。如果设置了statusCode,请求将不会发送到对应的服务器,whistle将直接按状态码响应后返回给浏览器,利用此功能可以用来模拟 4xx、5xx等响应

www.example.com statusCode://500

更多内容请参考:匹配方式配置模式

replaceStatus

修改后台响应的状态码,和上面的statusCode的区别是:statusCode是直接响应,请求不会到后台,而replaceStatus是把后台返回的状态码修改掉

www.example.com replaceStatus://500

更多内容请参考:匹配方式配置模式

redirect

直接302响应,相当于配置 res.statusCode = 302res.headers.location = 'http://www.test.com/'

www.exammple.com redirect://http://www.test.com/

更多内容请参考:匹配方式配置模式

method

直接修改请求方法,这个与设置 req.method效果一样,且优先级高于后者。

www.example.com method://post

更多内容请参考:匹配方式配置模式

cache

设置响应的缓存头,可以设置 cache://no(或 cache://no-cache)、cache://no-storecache://200(cache://maxAge,maxAge为缓存的秒数)

www.example.com cache://no-store

更多内容请参考:匹配方式配置模式

reqDelay

延迟请求,可设置在多少毫米后再发送请求,与 req.delay 功能一致,优先级高于后者。

# 延迟3秒后请求
www.example.com reqDelay://3000 

更多内容请参考:匹配方式配置模式

attachment

设置下载文件的头部attachment://filename(默认filename为url中对应的文件名称,如果没有、则为index.html),让请求变成直接下载

#下载到文件index.html
www.qq.com attachment://

# 下载到指定文件 www.qq.com.html
www.qq.com attachment://www.qq.com.html

# 下载到文件名 api.html
http://www.expressjs.com.cn/4x/api.html attachment://

更多内容请参考:匹配方式配置模式

location

修改后台响应过来的http头部location字段,一般与replaceStatus配合使用,可以设置301302等,这个与redirect的区别是:redirect是直接响应,请求不会到后台

www.example.com/test.html replaceStatus://302 location://https://github.com/avwo

更多内容请参考:匹配方式配置模式

accept

修改请求头的accept字段

www.example.com accept://image/*

更多内容请参考:匹配方式配置模式

reqDelay

延迟请求,可设置在多少毫米后再发送请求,与 req.delay 功能一致,优先级高于后者。

# 延迟3秒后请求
www.example.com reqDelay://3000 

更多内容请参考:匹配方式配置模式

resDelay

延迟响应,可设置在多少毫米后再响应,与 res.delay 功能一致,优先级高于后者。

# 延迟3秒后响应
www.example.com resDelay://3000 

更多内容请参考:匹配方式配置模式

reqSpeed

设置请求速度(单位:kb/s,千比特/每秒),与 req.speed 功能一致,优先级高于后者。

# 2kb/s
www.example.com reqSpeed://2 

更多内容请参考:匹配方式配置模式

resSpeed

设置响应速度(单位:kb/s,千比特/每秒),与 res.speed 功能一致,优先级高于后者。

# 2kb/s
www.example.com resSpeed://2 

更多内容请参考:匹配方式配置模式

reqType

设置请求请求头的 content-type,与 req.headers['content-type'] 功能一致,优先级高于后者,且前者提供了一些关键字用来设置一些常用的类型头:

{
	'urlencoded': 'application/x-www-form-urlencoded',
	'form': 'application/x-www-form-urlencoded',
	'json': 'application/json',
	'text': 'text/plain',
	'upload': 'multipart/form-data',
	'multipart': 'multipart/form-data',
	'default': 'application/octet-stream'
}

配置模式:

# urlencoded
www.example.com reqType://urlencoded
# 相当于
www.example.com reqType://application/x-www-form-urlencoded

# 也可以自定义
www.example.com reqType://xxx/yyy

更多内容请参考:匹配方式配置模式

resType

设置响应头的 content-type,与 res.headers['content-type'] 功能一致,优先级高于后者,且前者提供了一些关键字用来设置一些常用的类型头(html, js, css, json, jsonp, txt等等):

# urlencoded
www.example.com resType://html
# 相当于
www.example.com resType://text/html

# 如果需要设置charset(注意:中间不能有空格)
www.example.com resType://text/html;charset=utf8

更多内容请参考:匹配方式配置模式

reqCharset

设置或修改请求头 content-typecharset=xxx

www.example.com reqCharset://utf8

更多内容请参考:匹配方式配置模式

resCharset

设置或修改响应头 content-typecharset=xxx

www.example.com resCharset://utf8

更多内容请参考:匹配方式配置模式

reqCookies

修改或添加请求的cookie:

# 把操作内容放在本地文件(windows)
www.example.com reqCookies://D:/workspace/test.txt
# 或(在windows路径分隔符可以用 `/` 及 `\`,两个是等价的)
www.example.com reqCookies://D:\workspace\test.txt
# max 或 linux(注意协议与内容之计有三条斜杠)
www.example.com reqCookies:///User/xxx/workspace/test.txt


# 把操作内容放在whistle的values系统
www.example.com reqCookies://{test.txt}

如何操作values系统,参考: 界面操作

test.txt可以有如下功能(后面会提供一系列协议,把这里面的一些常用功能拆出来,方便使用):

{
 	"name1": "value1",
	"name2": "value2",
	"num": 1,
	"bool": true
}

也可以采用行写法(详细参考JSON格式):

name1: value1
name2: value2
num:   1
bool: true

Note: :空格 分隔符为冒号+空格

更多内容请参考:匹配方式配置模式JSON格式

resCookies

修改或添加响应的cookie,响应的cookie比请求的cookie多了如下几个可以设置的属性,maxAge, path, domain, httpOnly, secure

# 把操作内容放在本地文件(windows)
www.example.com reqCookies://D:/workspace/test.txt
# 或(在windows路径分隔符可以用 `/` 及 `\`,两个是等价的)
www.example.com reqCookies://D:\workspace\test.txt
# max 或 linux(注意协议与内容之计有三条斜杠)
www.example.com reqCookies:///User/xxx/workspace/test.txt


# 把操作内容放在whistle的values系统
www.example.com reqCookies://{test.txt}

如何操作values系统,参考: 界面操作

test.txt可以有如下功能(后面会提供一系列协议,把这里面的一些常用功能拆出来,方便使用):

{
 	"name1": "value1",
	"name2": "value2",
	"num": 1,
	"bool": true
}

# 如要设置一些cookie属性可以采用如下方式:

{
 	"name1": {
 			"value": "value1",
 			"maxAge": 60,
 			"httpOnly": true,
 			"path": "/",
 			"secure": true,
 			"domain": ".example.com"
 		},
	"name2": "value2",
	"num": 1,
	"bool": true
}

也可以采用行写法(详细参考JSON格式):

name1: value1
name2: value2
num:   1
bool: true

Note: :空格 分隔符为冒号+空格

更多内容请参考:匹配方式配置模式JSON格式

reqCors

修改或添加请求头的cors:

# 把操作内容放在本地文件(windows)
www.example.com reqCors://D:/workspace/test.txt
# 或(在windows路径分隔符可以用 `/` 及 `\`,两个是等价的)
www.example.com reqCors://D:\workspace\test.txt
# max 或 linux(注意协议与内容之计有三条斜杠)
www.example.com reqCors:///User/xxx/workspace/test.txt


# 把操作内容放在whistle的values系统
www.example.com reqCors://{test.txt}

如何操作values系统,参考: 界面操作

test.txt可以有如下功能:

{
 	"origin": "*",
	"method": "POST", 
	"headers": "x-test"
}

其中:

  • origin 表示请求头字段 origin
  • method 表示请求头字段 access-control-request-method
  • headers 表示请求头字段 access-control-request-headers

也可以采用行写法(详细参考JSON格式):

origin: *
method: POST
headers: x-test

Note: :空格 分隔符为冒号+空格

更多内容请参考:匹配方式配置模式JSON格式CORS

resCors

修改或添加响应头的cors:

# 把操作内容放在本地文件(windows)
www.example.com resCors://D:/workspace/test.txt
# 或(在windows路径分隔符可以用 `/` 及 `\`,两个是等价的)
www.example.com resCors://D:\workspace\test.txt
# max 或 linux(注意协议与内容之计有三条斜杠)
www.example.com resCors:///User/xxx/workspace/test.txt


# 把操作内容放在whistle的values系统
www.example.com resCors://{test.txt}

# 一些关键字
# `*` 表示设置 access-control-allow-origin: *
www.example.com resCors://*



#  `enable` (v0.7.0及以上版本也可以用 `use-credentials`) 表示设置 access-control-allow-origin: http://originHost, 
# access-control-allow-credentials: true
www.example.com resCors://enable

如何操作values系统,参考: 界面操作

test.txt可以有如下功能:

{
 	"origin": "*",
	"methods": "POST, GET", 
	"headers": "x-test",
	"credentials": true,
	"maxAge": 300000
}

其中:

  • origin 表示响应头字段 access-control-allow-origin
  • methods 表示响应头字段 access-control-allow-methods
  • headers 表示响应头字段 access-control-expose-headers
  • maxAge 表示响应头字段 access-control-max-age
  • credentials 表示响应头字段 access-control-allow-credentials

也可以采用行写法(详细参考JSON格式):

origin: * methods: POST, GET headers: x-test credentials: true maxAge: 300000

Note: :空格 分隔符为冒号+空格

更多内容请参考:匹配方式配置模式JSON格式CORS

reqHeaders

修改或添加请求头,与 req.headers 的功能一致,优先级高于后者:

# 把操作内容放在本地文件(windows)
www.example.com reqHeaders://D:/workspace/test.txt
# 或(在windows路径分隔符可以用 `/` 及 `\`,两个是等价的)
www.example.com reqHeaders://D:\workspace\test.txt
# max 或 linux(注意协议与内容之计有三条斜杠)
www.example.com reqHeaders:///User/xxx/workspace/test.txt


# 把操作内容放在whistle的values系统
www.example.com reqHeaders://{test.txt}

如何操作values系统,参考: 界面操作

test.txt可以有如下功能(后面会提供一系列协议,把这里面的一些常用功能拆出来,方便使用):

{
 	"content-type": "application/x-www-form-urlencoded; charset=utf8",
	"name2": "value2",
	"num": 1,
	"bool": true
}

也可以采用行写法(详细参考JSON格式):

content-type: application/x-www-form-urlencoded; charset=utf8
name2: value2
num:   1
bool: true

Note: :空格 分隔符为冒号+空格

更多内容请参考:匹配方式配置模式JSON格式

resHeaders

修改或添加响应头,与 res.headers 的功能一致,优先级高于后者:

# 把操作内容放在本地文件(windows)
www.example.com resHeaders://D:/workspace/test.txt
# 或(在windows路径分隔符可以用 `/` 及 `\`,两个是等价的)
www.example.com resHeaders://D:\workspace\test.txt
# max 或 linux(注意协议与内容之计有三条斜杠)
www.example.com resHeaders:///User/xxx/workspace/test.txt


# 把操作内容放在whistle的values系统
www.example.com resHeaders://{test.txt}

如何操作values系统,参考: 界面操作

test.txt可以有如下功能(后面会提供一系列协议,把这里面的一些常用功能拆出来,方便使用):

{
 	"content-type": "text/html; charset=utf8",
	"name2": "value2",
	"num": 1,
	"bool": true
}

也可以采用行写法(详细参考JSON格式):

content-type: text/html; charset=utf8
name2: value2
num:   1
bool: true

Note: :空格 分隔符为冒号+空格

更多内容请参考:匹配方式配置模式JSON格式

reqPrepend

往请求内容前面添加数据,与 req.prepend 功能一样,优先级高于后者。

# 把操作内容放在本地文件(windows)
www.example.com reqPrepend://D:/workspace/test.txt
# 或(在windows路径分隔符可以用 `/` 及 `\`,两个是等价的)
www.example.com reqPrepend://D:\workspace\test.txt
# max 或 linux(注意协议与内容之计有三条斜杠)
www.example.com reqPrepend:///User/xxx/workspace/test.txt


# 把操作内容放在whistle的values系统
www.example.com reqPrepend://{test.txt}

如何操作values系统,参考: 界面操作

更多内容请参考:匹配方式配置模式

resPrepend

往响应内容前面添加数据,与 res.prepend 功能一样,优先级高于后者。

# 把操作内容放在本地文件(windows)
www.example.com resPrepend://D:/workspace/test.txt
# 或(在windows路径分隔符可以用 `/` 及 `\`,两个是等价的)
www.example.com resPrepend://D:\workspace\test.txt
# max 或 linux(注意协议与内容之计有三条斜杠)
www.example.com resPrepend:///User/xxx/workspace/test.txt


# 把操作内容放在whistle的values系统
www.example.com resPrepend://{test.txt}

如何操作values系统,参考: 界面操作

更多内容请参考:匹配方式配置模式

reqBody

替换请求内容,与 req.replace 功能一样,优先级高于后者。

# 把操作内容放在本地文件(windows)
www.example.com reqBody://D:/workspace/test.txt
# 或(在windows路径分隔符可以用 `/` 及 `\`,两个是等价的)
www.example.com reqBody://D:\workspace\test.txt
# max 或 linux(注意协议与内容之计有三条斜杠)
www.example.com reqBody:///User/xxx/workspace/test.txt


# 把操作内容放在whistle的values系统
www.example.com reqBody://{test.txt}

如何操作values系统,参考: 界面操作

更多内容请参考:匹配方式配置模式

resBody

替换响应内容,与 res.replace 功能一样,优先级高于后者。

# 把操作内容放在本地文件(windows)
www.example.com resBody://D:/workspace/test.txt
# 或(在windows路径分隔符可以用 `/` 及 `\`,两个是等价的)
www.example.com resBody://D:\workspace\test.txt
# max 或 linux(注意协议与内容之计有三条斜杠)
www.example.com resBody:///User/xxx/workspace/test.txt


# 把操作内容放在whistle的values系统
www.example.com resBody://{test.txt}

如何操作values系统,参考: 界面操作

更多内容请参考:匹配方式配置模式

reqAppend

往请求内容后面追加数据,与 req.append 功能一样,优先级高于后者。

# 把操作内容放在本地文件(windows)
www.example.com reqAppend://D:/workspace/test.txt
# 或(在windows路径分隔符可以用 `/` 及 `\`,两个是等价的)
www.example.com reqAppend://D:\workspace\test.txt
# max 或 linux(注意协议与内容之计有三条斜杠)
www.example.com reqAppend:///User/xxx/workspace/test.txt


# 把操作内容放在whistle的values系统
www.example.com reqAppend://{test.txt}

如何操作values系统,参考: 界面操作

更多内容请参考:匹配方式配置模式

resAppend

往响应内容后面追加数据,与 res.append 功能一样,优先级高于后者。

# 把操作内容放在本地文件(windows)
www.example.com resAppend://D:/workspace/test.txt
# 或(在windows路径分隔符可以用 `/` 及 `\`,两个是等价的)
www.example.com resAppend://D:\workspace\test.txt
# max 或 linux(注意协议与内容之计有三条斜杠)
www.example.com resAppend:///User/xxx/workspace/test.txt


# 把操作内容放在whistle的values系统
www.example.com resAppend://{test.txt}

如何操作values系统,参考: 界面操作

更多内容请参考:匹配方式配置模式

reqReplace

利用正则或字符串来匹配替换请求文本内容请求的content-type必须为表单(application/x-www-form-urlencoded)或其它文本类型:urlencoded、html、json、xml、text等);类似js字符串的replace方法

# 把操作内容放在本地文件(windows)
www.example.com reqReplace://D:/workspace/test.txt
# 或(在windows路径分隔符可以用 `/` 及 `\`,两个是等价的)
www.example.com reqReplace://D:\workspace\test.txt
# max 或 linux(注意协议与内容之计有三条斜杠)
www.example.com reqReplace:///User/xxx/workspace/test.txt


# 把操作内容放在whistle的values系统
www.example.com reqReplace://{test.txt}

test.txt:

{
	"/user=([^&])/ig": "user=$1$1",
	"str": "replacement"
}

/user=([^&])/ig: user=$1$1
str: replacement

如何操作values系统,参考: 界面操作

更多内容请参考:匹配方式配置模式JSON格式

resReplace

利用正则或字符串来匹配替换响应文本内容(响应的content-type必须文本类型:html、json、xml、text等);类似js字符串的replace方法

# 把操作内容放在本地文件(windows)
www.example.com resReplace://D:/workspace/test.txt
# 或(在windows路径分隔符可以用 `/` 及 `\`,两个是等价的)
www.example.com resReplace://D:\workspace\test.txt
# max 或 linux(注意协议与内容之计有三条斜杠)
www.example.com resReplace:///User/xxx/workspace/test.txt


# 把操作内容放在whistle的values系统
www.example.com resReplace://{test.txt}

test.txt:

{
	"/user=([^&])/ig": "user=$1$1",
	"str": "replacement"
}

/user=([^&])/ig: user=$1$1
str: replacement

例如给script外链加个随机数:

/<script(.*\s)src="([^"?]+)(?:\?*)([^"]*)"/ig: <script$1src="$2?t=1234567890&$3"

如何操作values系统,参考: 界面操作

更多内容请参考:匹配方式配置模式JSON格式

Note: 如果要替换整个内容,请使用上面的reqBodyresBody;如果替换表单提交的字段,请使用上面的urlParamsparams

reqWrite

将请求的内容(如果请求方法允许携带内容)写入的指定的文件夹或文件;如果是文件夹则whistle会根据请求的url和配置自动拼接成路径;如果指定或拼接所得的文件路径已经存在,则whistle不会覆盖已存在的文件

# 把请求的内容写入指定文件(确保原文件不存在,否则无法写入)(windows)
www.example.com/index.html reqWrite://D:/workspace/test.html
# 或(在windows路径分隔符可以用 `/` 及 `\`,两个是等价的)
www.example.com/index.html reqWrite://D:\workspace\test.html
# max 或 linux(注意协议与内容之计有三条斜杠)
www.example.com/index.html reqWrite:///User/xxx/workspace/test.html

# 把请求的内容写入指定文件夹(windows)
www.example.com reqWrite://D:/workspace
# 或(在windows路径分隔符可以用 `/` 及 `\`,两个是等价的)
www.example.com reqWrite://D:\workspace 
# max 或 linux(注意协议与内容之计有三条斜杠)
www.example.com reqWrite:///User/xxx/workspace

例如把所有请求内容写到指定文件夹:

/^https?:\/\/(.+)/ reqWrite:///User/yourname/test-req/$1

# 在windows中如果用 `\` 作为路径分割符要注意下,由于 `\$1` 是一个转义,正则表达式不会替换,改成 `/$1`
/^https?:\/\/(.+)/ reqWrite://D:\test-req/$1
# 或
/^https?:\/\/(.+)/ reqWrite://D:/test-req/$1

更多内容请参考:匹配方式配置模式

resWrite

将响应的内容(如果响应的状态码允许携带内容)写入的指定的文件夹或文件;如果是文件夹则whistle会根据请求的url和配置自动拼接成路径;如果指定或拼接所得的文件路径已经存在,则whistle不会覆盖已存在的文件

# 把响应的内容写入指定文件(确保原文件不存在,否则无法写入)(windows)
www.example.com/index.html reqWrite://D:/workspace/test.html
# 或(在windows路径分隔符可以用 `/` 及 `\`,两个是等价的)
www.example.com/index.html reqWrite://D:\workspace\test.html
# max 或 linux(注意协议与内容之计有三条斜杠)
www.example.com/index.html reqWrite:///User/xxx/workspace/test.html

# 把响应的内容写入指定文件夹(windows)
www.example.com reqWrite://D:/workspace
# 或(在windows路径分隔符可以用 `/` 及 `\`,两个是等价的)
www.example.com reqWrite://D:\workspace 
# max 或 linux(注意协议与内容之计有三条斜杠)
www.example.com reqWrite:///User/xxx/workspace

例如把所有请求内容写到指定文件夹:

/^https?:\/\/(.+)/ resWrite:///User/yourname/test-res/$1

# 在windows中如果用 `\` 作为路径分割符要注意下,由于 `\$1` 是一个转义,正则表达式不会替换,改成 `/$1`
/^https?:\/\/(.+)/ resWrite://D:\test-res/$1
# 或
/^https?:\/\/(.+)/ resWrite://D:/test-res/$1

更多内容请参考:匹配方式配置模式

reqWriteRaw

将请求的完整内容(包括请求方法、路径、协议、请求头、内容)写入的指定的文件夹或文件;如果是文件夹则whistle会根据请求的url和配置自动拼接成路径;如果指定或拼接所得的文件路径已经存在,则whistle不会覆盖已存在的文件

# 把请求的完整内容写入指定文件(确保原文件不存在,否则无法写入)(windows)
www.example.com/index.html reqWrite://D:/workspace/test.html
# 或(在windows路径分隔符可以用 `/` 及 `\`,两个是等价的)
www.example.com/index.html reqWrite://D:\workspace\test.html
# max 或 linux(注意协议与内容之计有三条斜杠)
www.example.com/index.html reqWrite:///User/xxx/workspace/test.html

# 把请求的完整内容写入指定文件夹(windows)
www.example.com reqWrite://D:/workspace
# 或(在windows路径分隔符可以用 `/` 及 `\`,两个是等价的)
www.example.com reqWrite://D:\workspace 
# max 或 linux(注意协议与内容之计有三条斜杠)
www.example.com reqWrite:///User/xxx/workspace

例如把所有请求内容写到指定文件夹:

/^https?:\/\/(.+)/ resWrite:///User/yourname/test-req-raw/$1

# 在windows中如果用 `\` 作为路径分割符要注意下,由于 `\$1` 是一个转义,正则表达式不会替换,改成 `/$1`
/^https?:\/\/(.+)/ resWrite://D:\test-req-raw/$1
# 或
/^https?:\/\/(.+)/ resWrite://D:/test-req-raw/$1

更多内容请参考:匹配方式配置模式

resWriteRaw

将响应的完整内容(包括协议、状态码、状态信息、响应头、内容)写入的指定的文件夹或文件;如果是文件夹则whistle会根据请求的url和配置自动拼接成路径;如果指定或拼接所得的文件路径已经存在,则whistle不会覆盖已存在的文件

# 把响应的完整内容写入指定文件(确保原文件不存在,否则无法写入)(windows)
www.example.com/index.html reqWrite://D:/workspace/test.html
# 或(在windows路径分隔符可以用 `/` 及 `\`,两个是等价的)
www.example.com/index.html reqWrite://D:\workspace\test.html
# max 或 linux(注意协议与内容之计有三条斜杠)
www.example.com/index.html reqWrite:///User/xxx/workspace/test.html

# 把响应的完整内容写入指定文件夹(windows)
www.example.com reqWrite://D:/workspace
# 或(在windows路径分隔符可以用 `/` 及 `\`,两个是等价的)
www.example.com reqWrite://D:\workspace 
# max 或 linux(注意协议与内容之计有三条斜杠)
www.example.com reqWrite:///User/xxx/workspace

例如把所有请求内容写到指定文件夹:

/^https?:\/\/(.+)/ resWriteRaw:///User/yourname/test-res-raw/$1

# 在windows中如果用 `\` 作为路径分割符要注意下,由于 `\$1` 是一个转义,正则表达式不会替换,改成 `/$1`
/^https?:\/\/(.+)/ resWriteRaw://D:\test-res-raw/$1
# 或
/^https?:\/\/(.+)/ resWriteRaw://D:/test-res-raw/$1

更多内容请参考:匹配方式配置模式

css

往content-type为html或css响应的内容后面追加数据(res.append 的追加是不区分类型),如果是html,则会自动加上 style 标签在追加到响应内容,如果是css,则会自动追加到文本后面。

# 把操作内容放在本地文件(windows)
www.example.com css://D:/workspace/test.css
# 或(在windows路径分隔符可以用 `/` 及 `\`,两个是等价的)
www.example.com css://D:\workspace\test.css
# max 或 linux(注意协议与内容之计有三条斜杠)
www.example.com css:///User/xxx/workspace/test.css


# 把操作内容放在whistle的values系统
www.example.com css://{test.css}

如何操作values系统,参考: 界面操作

更多内容请参考:匹配方式配置模式

html

往content-type为html响应的内容后面追加数据(res.append 的追加是不区分类型)。

# 把操作内容放在本地文件(windows)
www.example.com html://D:/workspace/test.html
# 或(在windows路径分隔符可以用 `/` 及 `\`,两个是等价的)
www.example.com html://D:\workspace\test.html
# max 或 linux(注意协议与内容之计有三条斜杠)
www.example.com html:///User/xxx/workspace/test.html


# 把操作内容放在whistle的values系统
www.example.com html://{test.html}

如何操作values系统,参考: 界面操作

更多内容请参考:匹配方式配置模式

js

往content-type为html或js响应的内容后面追加数据(res.append 的追加是不区分类型),如果是html,则会自动加上 script 标签再追加到响应内容后面,如果是js,则会自动追加到文本后面。

# 把操作内容放在本地文件(windows)
www.example.com js://D:/workspace/test.js
# 或(在windows路径分隔符可以用 `/` 及 `\`,两个是等价的)
www.example.com js://D:\workspace\test.js
# max 或 linux(注意协议与内容之计有三条斜杠)
www.example.com js:///User/xxx/workspace/test.js


# 把操作内容放在whistle的values系统
www.example.com js://{test.js}

如何操作values系统,参考: 界面操作

更多内容请参考:匹配方式配置模式