热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:[转]whistle全新的跨平台web调试工具

whistle是基于Node实现的跨平台web调试代理工具,类似的工具有Windows平台上的Fiddler+Willow,基于Java实现的Charles,及公司同事

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地址

技术分享图片

安装启动

安装启动whistle,需要以下四个步骤: 安装node、安装whistle、启动whistle、配置代理。


  1. 安装Node(建议安装最新版本,LTS版本或当前版本都可以,如果已安装可以忽略此步骤):https://nodejs.org/
    安装tnpm():

    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


  2. 安装whistle及在公司网络访问外网需要用到的插件txpac插件:

    tnpm install -g whistle @tencent/whistle.txpac
    # Mac、Linux用户可能需要加sudo
    sudo tnpm install -g whistle @tencent/whistle.txpac


  3. 启动whistle
    w2 start
    whistle默认端口为8899,如果要修改端口号,可以这么启动:
    w2 start -p 8888
    重启whistle:
    w2 restart
    关闭whistle:
    w2 stop
    更多内容请查看命令行帮助:
    w2 help

  4. 配置代理
    whistle需要手动配置浏览器代理或者系统代理(代理的ip为whistle所在机器的ip,如果是本机就填127.0.0.1;端口号为启动时设置的端口号,默认为8899):


    • 配置浏览器代理(推荐使用):
      安装chrome代理插件: whistle-for-chrome插件 或者 Proxy SwitchySharp
      安装firefox代理插件: Proxy Selector


    • 配置系统代理:
      1) Windows
      2) Mac





使用方法

安装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可以为:


  1. 域名:www.test.com(所有该域名下的请求都会匹配operator-uri)

  2. 路径: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)

  3. 正则:/^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://*

一些例子



  1. 拦截HTTPS

    不开启拦截HTTPS,无法在whistle看到HTTPS和Websockt请求响应的明文,且只能通过whistle对HTTPS和Websockt设置host、代理等有限的操作,要通过whistle完全操作HTTPS、Websocket请求响应,需要开启HTTPS拦截及在系统或浏览器安装whistle的根证书,具体参见:https://avwo.github.io/whistle/webui/https.html


  2. 配置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

    完整功能参见协议列表。


  3. 修改请求

    以下功能都支持通过域名、路径、正则匹配方式,为方便只以域名匹配方式为例,其它同理:

    # 修改url参数
    www.qq.com urlParams://E: estparams.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配置里面,具体参见实现原理、数据格式。
    完整功能参见协议列表。


  4. 修改响应

    以下功能都支持通过域名、路径、正则匹配方式,为方便只以域名匹配方式为例,其它同理:

    # 修改响应状态码
    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配置里面,


  5. 设置代理

    以下功能都支持通过域名、路径、正则匹配方式,为方便只以域名匹配方式为例,其它同理:

    # 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

    完整功能参见协议列表。


  6. 移动端调试

    打开whistle配置界面右上角的Online按钮获取当前whistle的ip和端口,移动设备根据相应的ip和端口配置代理(确保移动设备和PC要在同一网段);配置完后如果还是无法访问,可能需要关闭防火墙或者设置白名单。

    # weinre(调试网页DOM结构)
    www.qq.com weinre://test
    # log(输出网页console打印的日志)
    www.qq.com log://{test.js}

    具体参见:weinre、log

    完整功能参见协议列表。


  7. 其它功能

    以下功能都支持通过域名、路径、正则匹配方式,为方便只以域名匹配方式为例,其它同理:

    # 禁用缓存
    www.qq.com disable://cache
    # 忽略规则
    www.qq.com filter://rule|host|https

    完整功能参见协议列表。



插件扩展及应用

whistle支持通过Node模块的方式扩展功能,具体参见:插件开发。

插件的一些应用:


  1. HTTP代理服务器功能:imweb本地代理imwebproxy(里面的Pb和CMEM的功能分别对应两个whistle插件whistle.imwebproxy、whistle.cmem)

  2. 扩展协议功能:imweb前端本地调试环境whistle.imwebenv

  3. 扩展界面功能:whistle.websocket


用户反馈

有问题可以先查whistle帮助文档;

如果还是无法解决或者有建议、贡献代码等可以使用下面任一种方式:

最后,如果whistle对你有帮助,给项目加个Star: https://github.com/avwo/whistle


推荐阅读
  • 必须先赞下国人npm库作品:node-images(https:github.comzhangyuanweinode-images),封装了跨平台的C++逻辑,形成nodejsAP ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • 解决github访问慢的问题的方法集锦
    本文总结了国内用户在访问github网站时可能遇到的加载慢的问题,并提供了解决方法,其中包括修改hosts文件来加速访问。 ... [详细]
  • 本文介绍了响应式页面的概念和实现方式,包括针对不同终端制作特定页面和制作一个页面适应不同终端的显示。分析了两种实现方式的优缺点,提出了选择方案的建议。同时,对于响应式页面的需求和背景进行了讨论,解释了为什么需要响应式页面。 ... [详细]
  • 2016 linux发行版排行_灵越7590 安装 linux (manjarognome)
    RT之前做了一次灵越7590黑苹果炒作业的文章,希望能够分享给更多不想折腾的人。kawauso:教你如何给灵越7590黑苹果抄作业​zhuanlan.z ... [详细]
  • JavaScript简介及语言特点
    本文介绍了JavaScript的起源和发展历程,以及其在前端验证和服务器端开发中的应用。同时,还介绍了ECMAScript标准、DOM对象和BOM对象的作用及特点。最后,对JavaScript作为解释型语言和编译型语言的区别进行了说明。 ... [详细]
  • 本文介绍了网页播放视频的三种实现方式,分别是使用html5的video标签、使用flash来播放以及使用object标签。其中,推荐使用html5的video标签来简单播放视频,但有些老的浏览器不支持html5。另外,还可以使用flash来播放视频,需要使用object标签。 ... [详细]
  • 本文介绍了在Ubuntu系统中清理残余配置文件和无用内容的方法,包括清理残余配置文件、清理下载缓存包、清理不再需要的包、清理无用的语言文件和清理无用的翻译内容。通过这些清理操作可以节省硬盘空间,提高系统的运行效率。 ... [详细]
  • 本文整理了常用的CSS属性及用法,包括背景属性、边框属性、尺寸属性、可伸缩框属性、字体属性和文本属性等,方便开发者查阅和使用。 ... [详细]
  • 【前端工具】nodejs+npm+vue 安装(windows)
    预备先看看这几个是干嘛的,相互的关系是啥。nodejs是语言,类比到php。npm是个包管理,类比到composer。vue是个框架&# ... [详细]
  • Vue基础一、什么是Vue1.1概念Vue(读音vjuː,类似于view)是一套用于构建用户界面的渐进式JavaScript框架,与其它大型框架不 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了markdown[软件代理设置]相关的知识,希望对你有一定的参考价值。 ... [详细]
author-avatar
手机用户2602916725
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有