版權聲明:本文由吳文斌原創文章,轉載請註明出處:
文章原文連接:https://www.qcloud.com/community/article/151css
來源:騰雲閣 https://www.qcloud.com/communityhtml
whistle是基於Node實現的跨平臺web調試代理工具,相似的工具備Windows平臺上的Fiddler+Willow,基於Java實現的Charles,及公司同事基於Node實現的Livepool等等;whistle與全部的web調試代理工具同樣,主要功能也是用於查看、修改HTTP、HTTPS、Websockt的請求響應或者做爲HTTP代理服務器,但不一樣於Fildder+Willow、Charles和Livepool經過斷點的方式修改請求響應,whistle採用的是相似配置Hosts方式,經過配置修改請求響應,且提供規則分組功能及經過域名、路徑、正則三種匹配方式(系統的hosts配置只支持域名匹配),特別針對終端調試提供了weinre,log等功能,並支持經過Node模塊進行擴展。前端
Github地址node
安裝啓動whistle,須要如下四個步驟: 安裝node、安裝whistle、啓動whistle、配置代理。git
安裝Node(建議安裝最新版本,LTS版本或當前版本均可以,若是已安裝能夠忽略此步驟):https://nodejs.org/
安裝tnpm():github
npm install @tencent/tnpm -g --registry=http://r.tnpm.oa.com --no-proxy # Mac、Linux用戶可能須要加sudo sudo npm install @tencent/tnpm -g --registry=http://r.tnpm.oa.com --no-proxy
安裝whistle及在公司網絡訪問外網須要用到的插件txpac插件:web
tnpm install -g whistle @tencent/whistle.txpac # Mac、Linux用戶可能須要加sudo sudo tnpm install -g whistle @tencent/whistle.txpac
w2 start
w2 start -p 8888
w2 restart
w2 stop
w2 help
配置代理
whistle須要手動配置瀏覽器代理或者系統代理(代理的ip爲whistle所在機器的ip,若是是本機就填127.0.0.1
;端口號爲啓動時設置的端口號,默認爲8899
):正則表達式
安裝node、安裝whistle、啓動whistle、配置代理後能夠開始使用whistle,用Chrome瀏覽器打開whistle配置管理頁面
界面相關操做參見界面功能;
傳統hosts的配置模式:
# 單個host ip hostname # 組合host ip hostname1 hostname2 ... hostnameN # 例如 127.0.0.1 www.example.com 127.0.0.1 a.example.com b.example.com c.example.com
whistle的配置模式:
# 單個操做 pattern operator-uri # 若是pattern和operator-uri不一樣時爲域名或路徑的一種組合,位置能夠調換 operator-uri pattern # 組合模式 pattern operator-uri1 operator-uri2 ... operator-uriN # pattern1和operator-uri不一樣時爲域名或路徑的一種組合,能夠以下配置 operator-uri pattern1 pattern2 ... patternN
其中,pattern能夠爲:
www.test.com(
全部該域名下的請求都會匹配operator-uri
)http://www.test.com/xxx
(http://www.test.com/xxx
及其子路徑的請求都會匹配operator-uri),或不加協議protocol://www.test.com/xxx,protocol
能夠爲http、https、ws、wss(http://www.test.com/xxx
及其子路徑的請求都會匹配operator-uri
)/^https?:\/\/([^\/]+)\/xxx/(http(s)://host:port/xxx
及其子路徑的請求都會匹配operator-uri
,且在operator-uri
中能夠經過$1, $2, ..., $9
獲取url裏面的子匹配)operator-uri
由上述基本功能抽象成的形如protocol://ruleValue
的URI,whistle會根據匹配的operator-uri
的protocol及ruleValue修改請求或響應,protocol和ruleValue的詳細內容參見whistle幫助文檔及協議列表。
例如:
# 修改www.example.com的響應cors www.example.com resCors://* # 或 resCors://* www.example.com # 同時修改多個自定域名或路徑 resCors://* /example\.com/ a.test.com b.test.com # 修改www.test.com的帶端口host、referer和響應的cors www.test.com 127.0.0.1:8080 referer://http://www.example.com resCors://*
攔截HTTPS
不開啓攔截HTTPS,沒法在whistle看到HTTPS和Websockt請求響應的明文,且只能經過whistle對HTTPS和Websockt設置host、代理等有限的操做,要經過whistle徹底操做HTTPS、Websocket請求響應,須要開啓HTTPS攔截及在系統或瀏覽器安裝whistle的根證書,具體參見:https://avwo.github.io/whistle/webui/https.html
配置host
# 傳統hosts配置 127.0.0.1 www.example.com # 等價於: www.example.com 127.0.0.1 127.0.0.1 a.example.com b.example.com c.example.com # 支持帶端口 127.0.0.1:8080 www.example.com # 等價於: www.example.com 127.0.0.1:8080 127.0.0.1:8080 a.example.com b.example.com c.example.com # 支持經過域名獲取host host://www.qq.com:8080 www.example.com # 等價於: www.example.com host://www.qq.com:8080 host://www.qq.com:8080 a.example.com b.example.com c.example.com # 支持經過正則表達式匹配 127.0.0.1:8080 /example\.com/i # 等價於: /example\.com/i 127.0.0.1:8080 127.0.0.1:8080 /example\.com/ /test\.com/ # 支持路徑匹配 127.0.0.1:8080 example.com/test # 等價於: example.com/test 127.0.0.1:8080 127.0.0.1:8080 http://example.com/index.html https://www.test.com/test
完整功能參見協議列表。
修改請求
如下功能都支持經過域名、路徑、正則匹配方式,爲方便只以域名匹配方式爲例,其它同理:
# 修改url參數 www.qq.com urlParams://E:\test\params.json # 請求方法 www.qq.com method://post # 添加請求頭 www.qq.com reqHeaders://(x-a=1&x-b=a%20b) # 修改referer(修改referer快捷方法) www.qq.com referer://http://ke.qq.com/ # 修改cookie(修改請求cookie快捷方法) www.qq.com reqCookie://{reqCookie.json} # 修改請求表單 www.qq.com params://{form.json}
JSON對象能夠存在本地文件,或存在界面的Values,也能夠內聯到Rules配置裏面,具體參見實現原理、數據格式。
完整功能參見協議列表。
修改響應
如下功能都支持經過域名、路徑、正則匹配方式,爲方便只以域名匹配方式爲例,其它同理:
# 修改響應狀態碼 www.qq.com statusCode://500 # 請求不會發送到後臺服務器,能夠用來模擬4xx、5xx請求 www.qq.com replaceStatus://404 # 請求返回後再修改statusCode # 添加響應頭 www.qq.com resHeaders://(x-res-a=1&x-res-b=a%20b) # 修改響應類型(修改響應類型的快捷方法) www.qq.com resType://text/plain # 或者: www.qq.com resType://text # 請求替換 www.qq.com https://www.baidu.com # 本地替換(windows中目錄分割符能夠用`\`,也能夠用`/`) www.qq.com file://E:\xxx # 等價於: file://E:/xxx www.qq.com # Mac或Linux www.qq.com file:///User/xxx/test # 若是要讓本地沒有對應文件的請求繼續請求線上,能夠採用 www.qq.com xfile://E:\xxx # 本地替換jsonp www.qq.com tpl://E:\xxx.json # xxx.json: {callback}({"ec": 0}) www.qq.com xtpl://E:\xxx.json # xxx.json: {callback}({"ec": 0}) # 注入html、css、js(whistle會自動根據響應類型封裝後注入) www.qq.com html://htmlFile www.qq.com css://cssFile www.qq.com js://jsFile
JSON對象或注入的文本能夠存在本地文件,或存在界面的Values,也能夠內聯到Rules配置裏面,
設置代理
如下功能都支持經過域名、路徑、正則匹配方式,爲方便只以域名匹配方式爲例,其它同理:
# http代理 www.qq.com proxy://127.0.0.1:8888 # 等價於: proxy://127.0.0.1:8888 www.qq.com # 同時設置多個 proxy://127.0.0.1:8888 www.qq.com /google/ /facebook/ # socks代理 www.qq.com scoks://127.0.0.1:1008 # 等價於: socks://127.0.0.1:8888 www.qq.com # 同時設置多個 socks://127.0.0.1:1008 www.qq.com /google/ /facebook/ # pac腳本 # 設置辦公網pac腳本(若是安裝了whistle.txpac,則無需設置) /./ pac://http://txp-01.tencent.com/proxy.pac # 設置辦公網pac腳本(若是安裝了whistle.txpac,則無需設置) /./ pac://http://txp-01.tencent.com/proxy_devnet.pac
完整功能參見協議列表。
移動端調試
打開whistle配置界面右上角的Online按鈕獲取當前whistle的ip和端口,移動設備根據相應的ip和端口配置代理(確保移動設備和PC要在同一網段);配置完後若是仍是沒法訪問,可能須要關閉防火牆或者設置白名單。
# weinre(調試網頁DOM結構) www.qq.com weinre://test # log(輸出網頁console打印的日誌) www.qq.com log://{test.js}
完整功能參見協議列表。
其它功能
如下功能都支持經過域名、路徑、正則匹配方式,爲方便只以域名匹配方式爲例,其它同理:
# 禁用緩存 www.qq.com disable://cache # 忽略規則 www.qq.com filter://rule|host|https
完整功能參見協議列表。
whistle支持經過Node模塊的方式擴展功能,具體參見:插件開發。
插件的一些應用:
有問題能夠先查whistle幫助文檔;
若是仍是沒法解決或者有建議、貢獻代碼等可使用下面任一種方式:
最後,若是whistle對你有幫助,給項目加個Star: https://github.com/avwo/whistle