node-proxymock
v0.4.3
Published
proxy and mock
Downloads
15
Readme
proxymock
类似fiddler的编程式代理mock工具
启用了3个端口, 代理服务器转发到http server和https server, 最终在express中集中处理
实际上只需要2个端口就可以实现同样的功能, 但3个端口可以做的事情更多, 比如http Server和https Server可以和proxy Server部署在不同的机器上, 实现Proxy Server向不同机器转发请求
如何使用
yarn add node-proxymock
或npm install node-proxymock --save
请参考test
const { proxyMock } = require('node-proxymock');
proxyMock({
rules: {
'GET http://e.iguzhi.com/lib/c.json': async(req, res, rawData) => {
return {
a: 5,
b: 6
}
},
'GET http://f.iguzhi.com/api/d.json': async(req, res, rawData) => {
await new Promise((resolve) => setTimeout(() => resolve(), 3000))
res.json([{a:23},'ff', [24.4,22]])
},
'GET http://g.iguzhi.com/api/ss.json': {
a: 33,
b: 44
},
'POST https://test.abc.com/api/mini/go.do': async(req, res, rawData) => {
return req.body;
},
'^ GET http://g.iguzhi.com/api/s.json': { // 以 ^ 开头的规则不会发送真实请求而直接返回这里的mock数据
a: 1,
b: 2
},
'GET https://www.jb51.net/skin/2019/css/base.css': '123',
'GET https://www.jb51.net/article/1353101.htm': (req, res, rawData) => {
return `
<html>
<title>Hello ProxyMock</title>
<body>类似fiddler的编程式代理mock工具</body>
</html>
`
},
// '^ POST https://a.iguzhi.com/pmp.gif': { b: 55556666 },
'GET https://i.baidu.com/map.json': (req, res, rawData) => {
return rawData;
},
'GET https://www.jb51.net/jslib/syntaxhighlighter/scripts/shCore.js': (req, res, rawData) => {
return `alert('hello proxymock')`
},
'^ GET /iguzhi\.com\/regexp\/test\.json/i': 'test regexp match' // 支持正则
},
setSystemProxy: true, // 是否设置系统代理, 默认值 false
logLevel: 'info', // 日志级别, 默认值级别 info
disableCache: true // 禁用缓存, 默认值 true
});
匹配规则优先级
通过
req.method
、req.protocol + '://' + req.hostname + req.path
与 配置的规则进行比对优先
===
比对, 比对失败再进行正则比对正则比对时,
req.method
依然是===
比对,req.protocol + '://' + req.hostname + req.path
部分使用正则比对进入到正则比对时, 如果有多个正则规则, 那么遇到第一个匹配成功的规则后终止后续规则比对
测试
运行 yarn test
或者 npm run test
response header 附加字段说明
Prxoy-Engine: ProxyMock
表示当前资源是经过ProxyMock转发而来
Prxoy-Phase-Flag: ^
表示当前资源由命中规则的数据直接返回, 没有向远程服务器发送真实请求; 若命中规则是函数则该函数没有第三个参数. 请注意与下一条描述的差异点
Prxoy-Phase-Flag: $
表示当前资源虽然由命中规则返回, 但是在向远程服务器发送真实请求返回真实数据后再返回命中规则的返回的数据; 如果命中规则是个函数, 那么该函数的第三个参数是真实请求返回的数据
日志
日志打印在操作系统的用户目录下 .proxymock/logs
参考以下分享、感谢作者
浅谈一个网页打开的全过程(涉及DNS、CDN、Nginx负载均衡等)
利用nodejs搭建 https 代理服务器并实现中间人攻击