enable
通过规则启用 HTTPS、隐藏请求、终止请求等功能。
规则语法
txt
pattern enable://action1|action2|... [filters...]
# 等效于:
pattern enable://action1 enable://action2 ... [filters...]| 参数 | 描述 | 详细文档 |
|---|---|---|
| pattern | 匹配请求 URL 的表达式 | 匹配模式文档 |
| action | 具体动作,详见下面的说明 | |
| filters | 可选过滤器,支持匹配: • 请求URL/方法/头部/内容 • 响应状态码/头部 | 过滤器文档 |
abort:请求或响应阶段中断请求(根据匹配阶段)abortReq:请求阶段中断请求abortRes:响应阶段中断请求authCapture:强制在转成 HTTPS 之前执行 auth hook(默认是转成 HTTPS 请求后再执行插件的 auth hook)auto2http:开启 HTTPS 请求报 TLS 错误自动转成 HTTP 请求,默认情况下如果 serverIP 是本地 IP 会自动启用bigData:扩大抓包数据显示限制(2M→16M)br:启用 BR 压缩响应内容gzip:启用 GZIP 压缩响应内容deflate:启用 Deflate 压缩响应内容capture或https:Enable HTTPS(同 HTTPS菜单功能)captureIp:域名为 IP 的请求,默认不解密 HTTPS 请求,可以通过enable://captureIp启用解析 HTTPS 请求captureStream:将抓取到的请求与响应内容以数据流的形式,实时输出到抓包界面并动态追加显示clientCert:启用客户端与服务器之间的双向认证 (mTLS)clientId:请求头带上x-whistle-client-id: Whistle本地生成的唯一IDclientIp:为匹配的非本地请求设置x-forwarded-for请求头,将客户端的真实IP地址透传给上游服务customParser:自定义抓包界面显示内容,用法参考插件:https://github.com/whistle-plugins/whistle.custom-parserflushHeaders:response.writeHead(...)后调用 response.flushHeaders(默认执行)forHttp:让capture功能只对 HTTP 请求生效forHttps:让capture功能只对 HTTPS 请求生效forceReqWrite:使用 reqWrite、reqWriteRaw 将请求数据写入本地文件时,如果对应的文件已存在,默认跳过写入操作以保护现有文件,可以通过enable://forceReqWrite强制覆盖forceResWrite: 使用 resWrite、reqWriteRaw 将响应数据写入本地文件时,如果对应的文件已存在,默认跳过写入操作以保护现有文件,可以通过enable://forceResWrite强制覆盖h2:Whistle 代理 -> 服务器启用 HTTP2http2:浏览器 -> Whistle 代理 -> 服务器全部启用 HTTP2httpH2:Whistle 代理 -> 服务器的 HTTP 请求启用 HTTP2hide:在界面上隐藏抓包数据(不包括captureError和 Composer 发出的请求)hideComposer:隐藏 Composer 发出的请求hideCaptureError:隐藏captureError请求showHost:将服务器 IP 设置到响应头x-host-ipignoreSend:WebSocket 和 TUNNEL 请求时忽略发送数据帧(TUNNEL 请求要启用inspect)ignoreReceive:WebSocket 和 TUNNEL 请求时忽略接收数据帧(TUNNEL 请求要启用inspect)pauseSend:WebSocket 和 TUNNEL 请求时暂停发送数据帧(TUNNEL 请求要启用inspect)pauseReceive:WebSocket 和 TUNNEL 请求时暂停接收数据帧(TUNNEL 请求要启用inspect)inspect:使的在 Inspectors / Frames 看到 TUNNEL 请求的内容interceptConsole:截获console.xxx的请求并显示在 Whistle 管理界面的 Log 面板(默认开启)internalProxy:利用proxy、socks等代理协议将请求转发至其他代理服务器(如另一 Whistle 实例)。启用此功能后,已在第一层代理解密的 HTTPS 请求将以明文形式在代理链中传输,从而上游代理可以直接获取明文数据proxyFirst:优先使用 proxy 规则(默认情况下,同时匹配host和proxy,只有host生效)proxyHost:proxy 和 host 同时生效proxyTunnel:跟proxyHost一同使用,让上游代理再次通过隧道代理到上上游的 HTTP 代理,详见下面的示例keepCSP:通过htmlXxx/jsXxx/cssXxx注入内容时会自动删除响应头大csp字段,如果想保留这些字段可以用enable://keepCSPkeepAllCSP:通过htmlXxx/jsXxx/cssXxx/weinre/log注入内容时会自动删除响应头的csp字段,如果想保留这些字段可以用enable://keepAllCSPkeepCache:通过htmlXxx/jsXxx/cssXxx注入内容时会自动删除响应头的缓存字段,如果想保留原有的缓存头可以用enable://keepCachekeepAllCache:通过htmlXxx/jsXxx/cssXxx/weinre/log注入内容时会自动删除响应头的缓存字段,如果想保留原有的缓存头可以用enable://keepAllCachekeepClientId:保留请求原有的x-whistle-client-id请求头(默认会删除请求带过来的x-whistle-client-id)safeHtml:是一种安全防护机制,当使用htmlXxx/jsXxx/cssXxx向 HTML 页面注入内容时,会先检查响应内容的第一个非空白字符是否为{和[(JSON 对象开头字符),如果不是才会执行注入操作。这可以有效防止对非标准 HTML 响应(如 JSON 接口)的误注入strictHtml:是一种安全防护机制,当使用htmlXxx/jsXxx/cssXxx向 HTML 页面注入内容时,会先检查响应内容的第一个非空白字符是否为<,如果不是才会执行注入操作。这可以有效防止对非标准 HTML 响应(如 JSON 接口)的误注入multiClient:Whistle 作为公共代理且启用enable://clientId时会为所有请求添加一个固定的x-whistle-client-id请求头,这导致上游服务无法区分不同客户端。启用enable://multiClient后,将为每个客户端连接生成并维持一个唯一且不变的标识符,确保上游服务能准确识别请求来源requestWithMatchedRules:在请求头带上当前匹配的规则responseWithMatchedRules:在响应头带上当前匹配的规则tunnelHeadersFirst:用于控制请求头合并的优先级。插件可通过 tunnelKey 将隧道(TUNNEL)请求头传递至后续阶段。默认的合并规则是:若隧道头与解析后的普通请求头存在同名键,则保留普通请求头的值。启用enable://tunnelHeadersFirst可改变这一行为,确保隧道请求头优先,从而强制覆盖任何冲突的普通头useLocalHost:修改log和weinre请求URL的域名,使用内置域名useSafePort:修改log和weinre请求URL的端口,使用内置端口userLogin:设置 statusCode://401 是否显示登录框(默认显示)weakRule:默认情况下,当配置了 file 等协议时,proxy 规则会自动失效。通过设置weakRule属性,可以提升 proxy 规则的优先级,使其在上述场景中仍然生效socket:在启用 HTTPS 解析(Enable HTTPS或enable://https)后,发往80/443端口的 TUNNEL 请求会被强制尝试解析为 HTTP/HTTPS 流量。默认情况下,若解析失败,该连接将被销毁;而其他端口的请求解析失败则会继续以 TUNNEL 方式传输。通过设置enable://socket,可让发往80/443端口的请求在解析失败时同样降级为 TUNNEL 连接,避免连接被销毁websocket:用于处理非标准 WebSocket 连接。某些请求虽使用 WebSocket 协议传输,但其 Upgrade 请求头并非标准值(如Upgrade: websocket)。默认情况下,Whistle 会将其视为普通 TCP 连接而不解析数据。启用enable://websocket可强制 Whistle 识别此类连接为 WebSocket 协议并进行数据解析
配置示例
txt
# Enable HTTPS
www.example.com enale://https
# 延迟 3000毫秒终止请求
www.example.com/path reqDelay://3000 enable://abortReq
# 延迟 5000毫米终止响应
www.example.com/path resDelay://5000 enable://abortRes
# 本地替换的内容开启 GZIP
www.example.com/path file:///User/xxx/test enable://gzip
# 给上游代理设置 hosts (10.10.10.20:8888)
www.example.com/path proxy://10.1.1.1:8080 10.10.10.20:8888 enable://proxyHost
# 通过上游 HTTP 代理 (10.1.1.1:8080) 将请求通过隧道代理到指定的 HTTP 代理(10.10.10.20:8080)
www.example.com proxy://10.1.1.1:8080 10.10.10.20:8080 enable://proxyHost|proxyTunnel
# 启用浏览器 -> Whistle 代理 -> 服务器整个链路的 HTTP2 功能
www.example.com enable://http2
# 启用 Whistle 代理 -> 服务器的 HTTP2 功能
www.example.com enable://h2
# 强制 Whistle 代理 -> 服务器的 HTTP 请求使用 HTTP2 传输
www.example.com enable://httpH2
# 安全注入模式:当使用 htmlXxx/jsXxx/cssXxx 注入指令时,检测响应首字符不是 `{` 才注入
www.example.com/path enable://safeHtml
# 严格HTML注入模式:当使用 htmlXxx/jsXxx/cssXxx 注入指令时,检测响应首字符不是 `<` 才注入
www.example.com/path enable://strictHtml
# 自动添加 x-forwarded-for 请求头传递客户端真实 IP
www.example.com enable://clientIp
# 扩大抓包数据显示限制(2M→16M)
www.example.com/path enable://bigData
# 修改 log/weinre 请求 `URL` 的域名或端口
www.example.com/path enable://useLocalHost|useSafePort
# 强制 reqWrite/reqWriteRaw/resWrite/resWriteRaw 覆盖已有的文件
www.example.com/path enable://forceReqWrite|forceResWrite
# 强制 HTTPS 请求被解析前也走 `auth hook`(默认是转成 HTTPS 请求后再执行插件的 auth hook)
www.example.com enable://authCapture关联操作:disable