Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Web调试代理,类似Fiddler的工具. 完全Nodejs编写,跨平台. A smarty proxy tool for web debugging, it's works like Fiddler.
JavaScript Shell
Branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
bin
conf
doc
fun
lib
methods
scripts
test
.gitmodules
README.md
cli.js
package.json

README.md

Web调试代理 Dproxy

按照配置的 规则列表 提供灵活的http代理服务.
(暂时只支持普通http请求,后续添加websocket和https的支持)

主要面向前端开发环境做的设计,由此省掉繁琐的“绑Host清DNS缓存”操作

文档还需要完善,有问题可以直接联系我.

Mac下已经确认正常使用,其他平台功能正常,安装操作没有测试过

由于node0.8修改了tty相关接口,导致进入roll模式无法退出,稍后修复。

主要功能

普通的http代理服务器功能:代理浏览器的http请求,原样返回请求结果

遵照 规则列表 ,将匹配到的请求交给指定的handler处理,实现“偷梁换柱”的功能

作为一个简单的静态服务器:在前端开发的测试环境中替代nginx

使用方法

安装

当然你得先安装node和npm

  $ [sudo] npm install dproxy -g

第一次运行会自动创建~/.dproxy目录,内含几个配置样例,copy一下改个名就可以用了

想要安装最新的代码,直接clone这个库,执行 node cli.js

配置

配置文件都放在~/.dproxy目录下,格式仿造nginx的配置文件风格

  • dproxy.conf 是代理服务器全局配置

    工程下自带一个样例: dproxy.conf.sample
    直接拷贝,修改使用

  • rule 文件夹下的所有*.rule文件都是"代理规则"配置文件

    也自带了一个样例: rule.sample 直接拷贝,修改使用

代理规则

每个.rule文件被加载到服务中被当做一个"规则分组"(group)
分组之间保持独立(不会互相覆盖)
根据分组启用的先后顺序,后启用的分组,其中的规则会优先匹配
只能操作分组的"启用/停用"(不提供单条规则的操作)

.rule文件主要由三大部分: handler定义块, oneline配置块, 任意多个domain配置块

handler定义块:

这里定义的handler仅可以在当前分组中引用,全局配置文件(dproxy.conf)中同名的handler会被忽略
handler的书写格式见.sample样例文件

目前dproxy支持的handler类型:

  • local - 本地文件
  • remote - 某指定host请求
  • opm - 从opm服务获取文件
  • online - 代理到线上环境

其中, opm 是一个前端的包管理工具,用python编写项目地址

分域名配置块

每个域名写一个块(多个域名用逗号隔开)
rewrite 类似nginx的用法
default 如果没有找到匹配的规则,默认使用该条配置的handler处理该域名下的请求

匹配条件 只写除去域名剩下的路径部分,可以使用*作为通配符,用(xx|xxx)表示"或"操作

oneline配置块

意思是"单行配置",用一行配置添加一条规则, 匹配条件 需要写完整的url,也可以使用通配符

交互命令

proxy启动之后会进入一个简单的命令行模式,按一下Tab键列出所有命令:

  • groups 查看所有加载上来的规则分组,列表中的"*"号标示已启用的分组
  • up 启用一个分组 up
  • down 停用一个分组 down
  • ls 查看"某分组|全部"规则列表 ls []
  • roll 实时的滚动显示正在处理的请求,在滚动模式下按"q"键退回到命令行模式
  • status 查看服务器状态(内存,平台…)
  • exit 停止服务并退出

处理一个请求的流程

  1. 接收到一个请求
  2. 查看该请求url是否与 规则列表 中某条规则匹配
  3. 如果匹配,查询到该条规则指定的数据源(handler)
  4. 根据handler的类型,把参数传递给相应的代理模块
  5. 由代理模块发出请求,将处理结果返回浏览器
  6. 如果不匹配,默认直接从线上取回该内容返回浏览器
Something went wrong with that request. Please try again.