高手都在用的Whistle实用小技巧
2023-11-23 20:47:49
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"