如何使用fiddler做整个目录替换
前端开发经常会使用到 fiddler 的 AutoResponse 功能调试线上代码,在AutoResponse Tab页中可以很方便的指定一个本地文件替换服务器上的文件。
最经开发的一个项目,由于服务器部署环境十分复杂,要想在搭建一个本地环境十分困难,很自然的,用上了fiddler的AutoResponse作文件映射,一切都那么美好。由于页面中引入的js文件有几十个,在作文件映射时浪费了很多时间(即使直接修改mydocument/fiddler2/AutoResponder.xml也需要大量的时间),这十分不痛快,这些js在本地的目录结构和服务器上的目录结构完全一样,难道fiddler不能将URL某个目录直接映射到硬盘上的某个目录吗?在网上找了很多资料,没有找到现成的解决方法,看来只有自己用script写一个规则了。
按ctrl+R 或者在菜单上 Rules --> customize rules打开fiddler ScriptEditor.封装了两个方法,分别是整个目录替换和单个文件替换的。(单文件替换用fiddler自带的AutoResponse功能更强大,这里我为了不打开fiddler的AutoResponse功能就自己写了一个方法来满足我简单的需求)
在文件最后添加以下代码:
PLAIN TEXT
JAVASCRIPT:
/************************* custom rules *************************/
/**
* 按目录替换
*
* @param oSession {Session} Fiddler Session Object
* @param domain {String} 需要替换的为本地文件的URL前缀(以斜杠结束)
* @param folder {String} 本地文件目录的物理路径(两个反斜杠表示一个反斜杠,以反斜杠结束)
*/
static function AutoResponseFolder ( oSession: Session, domain:String, folder:String ) {
// 获取当前对话的完整URL
var fullUrl:String = oSession. fullUrl ;
if ( fullUrl. StartsWith ( domain ) ) {
var localPath:String = fullUrl. replace (domain, folder ) ;
//set back color
oSession [ 'ui-backcolor' ] = 'seashell' ;
//set delay
//oSession['response-trickle-delay'] = 2000;
//replace server file
oSession [ 'x-replywithfile' ] = localPath;
//write log
//FiddlerObject.log(localPath);
}
}
/**
* 单文件替换
*
* @param oSession {Session} Fiddler Session Object
* @param found {String} 需要替换的URL包含的关键字
* @param replacement {String} 本地文件目录的物理路径(两个反斜杠表示一个反斜杠)
*/
static function AutoResponse ( oSession: Session, found:String, replacement:String ) {
if ( oSession. uriContains ( found ) ) {
//set back color
oSession [ 'ui-backcolor' ] = 'lightgreen' ;
//set color
oSession [ 'ui-color' ] = 'black' ;
//replace server file
oSession [ 'x-replywithfile' ] = replacement;
//write log
//FiddlerObject.log(localPath);
}
}
/**
* 添加一个我自己的规则,
* 映射了两个文件test04.html和core.js
* 映射了一个目录news/
*/
static function AddRules ( oSession: Session ) {
// 路径和替换规则根据各项目实际情况替换
var webroot:String = 'c: \\ test \\ ' ;
AutoResponse ( oSession, 'search_noitem/?create=1', webroot + 'aaa \\ test04.html' ) ;
AutoResponse ( oSession, 'editor/core.js' , webroot + 'bbb \\ core.js' ) ;
// 需要替换的为本地文件的URL前缀(以斜杠结束)
var domain:String = 'http://local.test.com/' ;
// 本地文件目录的物理路径(两个反斜杠表示一个反斜杠,以反斜杠结束)
var folder:String = webroot + 'news \\ ' ;
AutoResponseFolder ( oSession, domain, folder ) ;
}
在OnBeforeRequest函数中调用AddRules,让fiddler在发起请求之前使用刚才添加的规则。
ctrl+S保存,无需重启fiddler,直接刷新页面就能看到规则已经生效了,为了醒目,我将目录映射的请求的背景色设置成红色,将单文件映射请求的背景设置成了绿色(fiddler AutoResponse代理的请求默认背景是灰色)。