返回

高手都在用的Whistle实用小技巧

前端

Whistle简介
Whistle是一个基于 Node 实现的跨平台抓包调试代理工具,可以帮助您抓取和分析HTTP/HTTPS请求和响应,并进行各种操作,如修改请求头、响应头、重写URL、替换返回内容等。Whistle支持多种平台,包括Windows、macOS、Linux、iOS和Android。

Whistle的实用小技巧

1. 匹配模式

Whistle使用正则表达式作为匹配模式,匹配模式必须以^开头(如果需要限制结束位置可以用$),*为通配符,支持通过$0...9获取通配符匹配的字符串,其中$0表示整个请求url。
例如,以下匹配模式可以匹配所有以/api/开头的请求:

^/api/

以下匹配模式可以匹配所有以/api/user开头的请求:

^/api/user

以下匹配模式可以匹配所有以/api/user/<username>开头的请求,并通过$1获取用户名:

^/api/user/\<username>

2. 替换返回内容

Whistle支持替换返回内容,这可以通过设置response.body规则来实现。
例如,以下规则将所有请求的返回内容替换为“Hello, world!”:

response.body = "Hello, world!"

以下规则将所有请求的返回内容替换为当前时间戳:

response.body = Date.now()

3. 超时模拟

Whistle支持超时模拟,这可以通过设置response.timeout规则来实现。
例如,以下规则将所有请求的超时时间设置为5秒:

response.timeout = 5000

以下规则将所有请求的超时时间设置为随机值(1-10秒):

response.timeout = Math.random() * 10000

4. 请求转发

Whistle支持请求转发,这可以通过设置request.forward规则来实现。
例如,以下规则将所有请求转发到本地端口8080:

request.forward = "http://127.0.0.1:8080"

以下规则将所有请求转发到远程服务器:

request.forward = "https://example.com"

5. Headers、Cookies、Body

Whistle支持修改请求头、响应头、请求体、响应体,这可以通过设置相应的规则来实现。
例如,以下规则将所有请求的User-Agent头修改为“Mozilla/5.0”:

request.headers.set("User-Agent", "Mozilla/5.0")

以下规则将所有请求的Cookie头修改为“name=value”:

request.cookies.set("name", "value")

以下规则将所有请求的请求体修改为“Hello, world!”:

request.body = "Hello, world!"

6. 重写

Whistle支持重写请求URL,这可以通过设置request.rewrite规则来实现。
例如,以下规则将所有请求的URL重写为“https://example.com”:

request.rewrite = "https://example.com"

以下规则将所有请求的URL重写为“/api/v2”:

request.rewrite = "/api/v2"

7. URL重定向

Whistle支持URL重定向,这可以通过设置response.redirect规则来实现。
例如,以下规则将所有请求重定向到“https://example.com”:

response.redirect = "https://example.com"

以下规则将所有请求重定向到“/api/v2”:

response.redirect = "/api/v2"

8. 本地开发

Whistle可以用于本地开发,通过设置proxy规则将所有请求转发到本地服务器,这可以方便您在本地开发和调试Web应用程序。
例如,以下规则将所有请求转发到本地端口8080:

proxy = "http://127.0.0.1:8080"

9. 移动端调试

Whistle可以用于移动端调试,通过设置proxy规则将手机的请求转发到电脑,这可以方便您在电脑上调试手机上的Web应用程序。
例如,以下规则将手机的请求转发到电脑上的端口8080:

proxy = "http://127.0.0.1:8080"

10. 性能优化

Whistle可以用于性能优化,通过设置cache规则缓存请求,这可以减少重复请求的开销,提高Web应用程序的性能。
例如,以下规则将所有请求缓存1小时:

cache = "max-age=3600"

以下规则将所有请求缓存1天:

cache = "max-age=86400"