fiddler实现后端接口 mock(不需要修改开发代码)
转载:http://blog.csdn.net/huazhongkejidaxuezpp/article/details/50435552
步骤
1. 获取 接口 定义(接口返回的json串)
2. json串放入本地txt文件中
例如, test.txt:
{"retCode": "200","Msg": "ok","retSign": "1323243","retTime": " 2324523232 ","totalCount": "13","data": []}
3. fiddler拦截接口,另返回值取自test.txt中的内容
step1: 接口拖入AutoResponder窗口
step2: 设置接口返回
step3: 设置成功后,直接访问接口即可
可能出现问题
1. 直接mock 接口返回值,js可能报错:No 'Access-Control-Allow-Origin'header is present on the requested resource
原因:在某域名下使用Ajax向另一个域名下的页面请求数据,会遇到跨域问题。另一个域名必须在response中添加 Access-Control-Allow-Origin 的header,
才能让前者成功拿到数据。
如:
解决: fiddler 设置 response的header
设置内容 : Access-Control-Allow-Origin *
fidder 设置 http返回头的其他方法 参考:
2. 返回值可能需要unicode编码(即,汉字编码后会变成诸如\u5a92\u5927\u5b66 类似的东西)
解决: 使用 unicode解码即可
unicode解码 工具:
http://www.alixixi.com/effect/read.asp?id=81144&c=168
http://tool.chinaz.com/tools/unicode.aspx
转化规则:
http://sentsin.com/web/120.html
http://www.cnblogs.com/skykang/archive/2011/05/30/2063176.html
3. 当A接口的reponse header :
Access-Control-Allow-Origin: http://XXX
Access-Control-Allow-Credentials: true
Access-Control-Allow-Credentials: true
B接口的
reponse header :
Access-Control-Allow-Origin: http://XXX
如果要mock B接口 , fiddler的filter必须精确设置为Access-Control-Allow-Origin: http://XXX
mock接口的其他方法
前提: 可以修改代码中接口的地址
方法: 可以使用mock.js,wiremock等 写代码/json配置方式mock接口
fiddler 修改request(请求数据)
方法一: bpu断点
方法二:url替换
以下是暂时性修改:
urlreplace oldstr newstr //设置替换
urlreplace //取消替换
urlreplace //取消替换
1)域名替换
urlreplace www.baidu.com 127.0.0.1:8080
2) url中指定字符串进行替换
urlreplace a=1 a=2
3) 正则表达式
参考:
urlreplace不支持正则替换,如需用正则,可打开FiddlerScript,在OnBeforeRequest中方法中找到下边代码:
复制内容到剪贴板 程序代码
if ((null != gs_ReplaceToken) && (oSession.url.indexOf(gs_ReplaceToken)>-1)) { // Case sensitive
oSession.url = oSession.url.Replace(gs_ReplaceToken, gs_ReplaceTokenWith);
}
替换为:
复制内容到剪贴板 程序代码
if ((null != gs_ReplaceToken) && (System.Text.RegularExpressions.Regex.IsMatch(oSession.url, gs_ReplaceToken))) { // Case sensitive
oSession.url = System.Text.RegularExpressions.Regex.Replace(oSession.url, gs_ReplaceToken, gs_ReplaceTokenWith);
}
复制内容到剪贴板 程序代码
if ((null != gs_ReplaceToken) && (oSession.url.indexOf(gs_ReplaceToken)>-1)) { // Case sensitive
oSession.url = oSession.url.Replace(gs_ReplaceToken, gs_ReplaceTokenWith);
}
替换为:
复制内容到剪贴板 程序代码
if ((null != gs_ReplaceToken) && (System.Text.RegularExpressions.Regex.IsMatch(oSession.url, gs_ReplaceToken))) { // Case sensitive
oSession.url = System.Text.RegularExpressions.Regex.Replace(oSession.url, gs_ReplaceToken, gs_ReplaceTokenWith);
}
永久性修改:
参考:
修改CustomRules.js:
请先在CustomRules.js 找到:
static function OnBeforeRequest ( oSession : Session ) {
// ...
}
在函式OnBeforeRequest 中加入:
if ( oSession . HostnameIs ( 'www.demo.com' ) )
oSession . hostname = 'www.dev.demo.com' ;
static function OnBeforeRequest ( oSession : Session ) {
// ...
}
在函式OnBeforeRequest 中加入:
if ( oSession . HostnameIs ( 'www.demo.com' ) )
oSession . hostname = 'www.dev.demo.com' ;