场景估计大家都了解,所以我们直接开始吧。
调试原理很简单,就是anyproxy提供了一个http的拦截器和规则配置加载器,加载对应的规则后进行http的一些操作,如forward等等。
npm install -g anyproxy
const resRegx = /\.[a-z0-9]{8}.min/i;
module.exports = {
summary: 'a rule to modify response',
* beforeSendRequest(requestDetail) {
let path = requestDetail.url;
let headers = requestDetail.requestOptions;
if (path.match(/.*xxx\.xxx\.com.*\.js/) || path.match(/.*xxx\.xxx\.com.*\.vm/)) {
var newOption = Object.assign({}, requestDetail.requestOptions, {
hostname: '127.0.0.1',
port: 8080,
headers: {...headers, host: '127.0.0.1'}
});
return {
protocol: 'http',
requestOptions: newOption
anyproxy --intercept --rule your_file.js
这样anyproxy就可以拦截默认端口8001了。接下来需要在ruleforward的静态文件路径server起来。所以我们需要一个静态文件服务器(因为我们项目访问JS有认证拦截,所以修改起来比较麻烦,就想看是否可以简单点).
这里可选的很多,最后选择了python的一行命令搭建当前目录的http静态服务器。
python -m SimpleHTTPServer 8080
上面看似已经连接起来了,但是如何让本地的请求端口80转发到对应的8001呢? 当然如果anyproxy拦截的就是80端口,那么这一步可以忽略。
使用的方法是在网络里添加http的proxy。这样完整的调用链条就形成了,可以愉快的玩耍了。
两者定位还是有很大的区别,所以放在一起对比可能不太合适。Charles更偏向网络层的应用,不具备加载Rule的能力。AnyProxy是一个Http代理服务器,只对Http(s)进行拦截。
在网络拦截的那一步,在想是不是用charles不用系统网络也可以?尝试了HTTP的PROXY并没有成功,这个可以等以后来填一下。
-
AnyProxy Github
-
使用MITM调试线上前端错误
AnyProxy使用本地静态资源调试线上
AnyProxy使用本地静态资源调试线上场景估计大家都了解,所以我们直接开始吧。调试原理很简单,就是anyproxy提供了一个http的拦截器和规则配置加载器,加载对应的规则后进行http的一些操作,如forward等等。AnyProxy部分安装AnyProxy,版本4.0npm install -g anyproxy编辑对应的ruleconst resRegx = /\.[a-...
注意AnyProxy不是代理服务器, 而是和SocksCap32(应该认识吧)等类似软件用途差不多,
主要是对其他软件的网络行为进行透明代理。
AnyProxy支持多个代理协议。比如你拥有一个代理服务器a.a.a.a:8080是http的,你无须设置IE,
只要把a.a.a.a:8080设置到AnyProxy,然后通过在AnyProxy的进程列表对你想要代理的IE进程(iexplore.exe)进行代理,
这样IE的网络数据都是通过AnyProxy再经过a.a.a.a:8080出去的。AnyProxy还提供了简单的连接、数据监视功能。
AnyProxy不仅仅可以抓包,还可以拦截请求并修改服务端响应,实现接口mock功能。面试时候经常会问到第三方支付如何测试这种,如果对接的第三方没提供测试环境,那么就需要搭建一个mock服务器,模拟支付接口返回的各种情况。
rule模块
AnyProxy提供了二次开发的能力,你可以用js编写自己的规则模块(rule),来自定义网络请求的处理逻辑。
注意:引用规则前,请务必确保文件来源可靠,...
目前我使用的是Anyproxy,AnyProxy。这个软件的特点是可以获取到https链接的内容。在2016年年初的时候微信公众号和微信文章开始使用https链接。并且Anyproxy可以通过修改rule配置实现向公众号的页面中插入脚本代码。下面开始介绍安装与配置过程。
1、安装NodeJS
2、在命令行或者终端运行 npm install -g anyproxy,mac系统需要加上sud...
Book-Air:wechat_sprider chen$ node index.js
[AnyProxy Log][2019-09-06 23:58:21]: throttle :10000kb/s
[2019-09-06 23:58:21 <lvl> ]<Parser> Load [article_list] success
[2019-09-06 23:58:21 <lvl> ]<Mysql>
[AnyPr
关于anyproxy
Anyproxy 是alibaba 前端团队开源的http/https 基于node的代理服务器。
业界的http代理工具在windows下有fiddler,mac有charles,为什么选择anyproxy呢?我个人认为有以下几个点:
同时兼容mac/windows用户
提供友好的web版界面,可实时观测网络请求...
$ spm install anyproxy-wsclient --save
var anyproxyWsclient = require ( 'anyproxy-wsclient' ) ;
new anyproxyWsclient ( {
baseUrl : "127.0.0.1" ,
port : "8003" , //8003 is the default web socket port for anyproxy
onOpen : function ( ) {
console . log ( "connection stablished" ) ;
fiddler可以抓包打断点后,修改返回的内容,便于模拟各种返回结果。anyproxy也可以通过写rule模块规则,模拟返回状态码、头部、body
beforeSendResponse
beforeSendResponse(requestDetail, responseDetail)
AnyProxy向客户端发送请求前,会调用beforeSendResponse,并带上参数r...
一般生产环境的前端代码都是经过压缩的,压缩的代码难以解读和定位问题,虽然有Chrome这一利器,但是你会发现看那些变量是a、b、c的压缩代码,也是让你头大如斗。
fiddle可以在不替换生产环境css/js的情况下,用本地未压缩的css/js代码进行调试。
fiddle 的配置步骤一: Fiddle–>Tools–>Fiddle Options步骤二: 本地代码替换生产环境代码步骤三: 再次发起请求
2、配置fidder,捕获https请求
我调试的是移动端h5的代码,所以首先是打开我要调试的页面,利用fiddler捕获到我当前这个页面所有的请求,包括js,接口,图片等,因为页面可能存在缓存,所以请求的时候有可能不会重新获取这些文件,所以要清一次缓存,一定要让fiddler捕获到你要替换的js文件
这个是我线上的js文件,想要替...
mab2hf:
Mapstruct使用问题Couldn‘t retrieve @Mapper annotation
阿松哥哥2018:
Spring的@Import注解和@ImportAware接口
sutonline:
Spring的@Import注解和@ImportAware接口
半梦Oo: