• reqMerge
    • 例子
      • 过滤规则

    reqMerge

    修改表单请求的内容,包括普通的表单、上传表单及请求类型为JSON的内容(Content-Type: application/json),其功能是通过reqMerge://jsonData指定的JSON对象来覆盖请求表单或对应JSON对象字段,如果是GET请求的表单,则会直接修改URL参数。

    修改其它类型的请求内容,可以用reqReplace

    配置方式:

    1. pattern reqMerge://filepath

    filepath为Values里面的{key}或者本地文件(如:e:\test\xxxe:/test/xxx/User/username/test/xxx等):

    1. field1: value1
    2. field2: value2
    3. filedN: valueN

    pattern参见匹配模式,更多模式请参考配置方式,json格式参考操作值。

    例子

    1. GET请求:
    1. www.test.com/cgi-bin/get-data reqMerge://(a=1&b=2)

    一般配置左边是pattern、右边是operator,如果pattern和operator可以区分开来则位置可以调换(高亮显示的颜色不一样),有关pattern可以参考:匹配模式

    上述配置,GET请求 https://www.test.com/cgi-bin/get-data?x=2&a=0 url会在whistle里面被替换成 https://www.test.com/cgi-bin/get-data?x=2&a=1&b=2,即后台收到的url是被修改后的;reqMerge://(a=1&b=2) 中括号里面即为操作值,操作值可以有多种写法,具体参考:操作值

    1. POST请求
    1. www.test.com/cgi-bin/send reqMerge://(a=1&b=2)

    上述配置,POST请求 https://www.test.com/cgi-bin/send 里面的内容(假设为:x=2&a=0)会被替换成 x=2&a=1&b=2

    1. 上传表单:用于修改上传表单的内容字段
      1. www.test.com/cgi-bin/upload reqMerge://{text.json}

    Values里面的test.json

    1. {
    2. "name1": "value1",
    3. "name2": "value2",
    4. "file1": {
    5. "filename": "text.txt",
    6. "content": "xxxxxxxxxxxxxxx"
    7. }
    8. }

    同样该上传表单经过whistle后对应的字段会别修改或添加新的字段。

    1. 修改请求类型为JSON的请求
      1. www.test.com/cgi-bin/post-json reqMerge://{text.json}
      Values里面的test.json
      1. {
      2. "name1": "value1",
      3. "name2": "value2",
      4. "test": {
      5. "test1": "11111",
      6. "test2": "22222"
      7. }
      8. }
      请求 www.test.com/cgi-bin/post-jsonContent-Type 必须为 application/json,且假设请求内容为:
      1. {"name2":123,"name3":333,"test":{"test1":1,"test3":{"test21":21}}}
      则请求经过whistle后到后台收到的内容为:
      1. {"name1":"value1","name2":"value2","name3":333,"test":{"test1":"11111","test2":"22222","test3":{"test21":21}}}

    括号的写法见:Rules的特殊操作符({}、()、<>)

    过滤规则

    需要确保whistle是最新版本:更新whistle

    如果要过滤指定请求或指定协议的规则匹配,可以用如下协议:

    1. ignore:忽略指定规则
    2. filter:过滤指定pattern,支持根据请求方法、请求头、请求客户端IP过滤

    例子:

    1. # 下面表示匹配pattern的同时不能为post请求且请求头里面的cookie字段必须包含test(忽略大小写)、url里面必须包含 cgi-bin 的请求
    2. # 即:过滤掉匹配filter里面的请求
    3. pattern operator1 operator2 excludeFilter://m:post includeFilter://h:cookie=test includeFilter:///cgi-bin/i
    4. # 下面表示匹配pattern1、pattern2的请求方法为post、或请求头里面的cookie字段不能包含类似 `uin=123123` 且url里面必须包含 cgi-bin 的请求
    5. operator pattern1 pattern2 includeFilter://m:post excludeFilter://h:cookie=/uin=o\d+/i excludeFilter:///cgi-bin/i
    6. # 下面表示匹配pattern的请求忽略除了host以外的所有规则
    7. pattern ignore://*|!host
    8. # 下面表示匹配pattern的请求忽略file和host协议的规则
    9. pattern ignore://file|host