回到顶部

阅读目录

Fiddler session 列表添加功能选项的方法(一键保存 body)

功能描述

1. 一键保存接口的响应内容和复制匹配规则到剪贴板(主要给 AutoResponder 做本地 mock 数据用)
2. 复制 url 的短路径等

配置说明

1. save_response.js 里面的内容添加到 Fiddler 脚本里的 class Handlers 里面
2. 修改 Fiddler 响应 json 文件的保存路径

使用说明

1. 会话右击选择 “Save Response Body” 保存响应文件和复制匹配规则到剪贴板
2. 会话右击选择 “Copy Uri For Yapi” 复制 短路径

效果截图

实现代码

	//右键 request 弹出框添加子菜单-保存响应内容, save_response.js 内容放在 class Handlers 类里面并修改保存路径
	public static ContextAction("Save Response Body") 
	function SaveResponseBody(oSessions: Session[]) {
		if (null == oSessions || oSessions.Length > 1){
			MessageBox.Show("Please choose an session."); return;
		}
		
		for (var x = 0; x < oSessions.Length; x++){
			//MessageBox.Show(oSessions[x]);
			//MessageBox.Show(oSessions[x].fullUrl);
			//MessageBox.Show(oSessions[x].GetResponseBodyAsString());
			var url = oSessions[x].url;
			//MessageBox.Show(url);
			//MessageBox.Show(a[0].replace(/\?/g,""));
			var reg = /\/.*\?/;
			var a = url.match(reg);
			var b;
			//MessageBox.Show(a);
			if(a == null){
				var reg = /\/.*/;
				var a = url.match(reg);
				var reg_rule = "METHOD:" + oSessions[x].RequestMethod + " REGEX:.*" + a[0];
				var b = a[0].replace(/\//g,"_").replace(/\?/g,"").substr(1);
			}else{
				var reg_rule = "METHOD:" + oSessions[x].RequestMethod + " REGEX:.*" + a[0].replace(/\?/g,"");
				var b = a[0].replace(/\//g,"_").replace(/\?/g,"").substr(1);
				}
			var filename = "D:\\work\\fiddler_session\\" + b + ".json";
			//MessageBox.Show(reg_rule);

			//var path_url = oSessions[x].fullUrl;
			var resp_body = oSessions[x].GetResponseBodyAsString();
			var is_json = resp_body.Contains('"');
			//MessageBox.Show(resp_body);
			
			if(is_json){
				/*
				//var filename = "E:/yinzhuoqun/fiddler_session/" + b;
				oSessions[x].utilDecodeResponse();//消除保存的请求可能存在乱码的情况
				var fso;
				var file;
				//var curDate = new Date();  
				fso = new ActiveXObject("Scripting.FileSystemObject");
				// 文件保存路径,可自定义
				// ForReading    1    只读的形式打开文件
				// ForWriting    2    可以写入打开的文件,重新写入,不会接着写
				// ForAppending    8    在文件的末尾接着写入
				// true表示如果没有该文件,则创建该文件。
				// 2 是覆盖,8 是追加
				file = fso.OpenTextFile(filename, 2, true, true);
				file.writeLine(oSessions[x].GetResponseBodyAsString());
				file.close();
				*/
				// 使用FileStream和StreamWriter保存文件
				var oBody = oSessions[x].GetResponseBodyAsString();
				try {
					var oFSO: System.IO.FileStream = new System.IO.FileStream(filename, System.IO.FileMode.Create, System.IO.FileAccess.Write);
					var oSW: System.IO.StreamWriter = new System.IO.StreamWriter(oFSO, System.Text.Encoding.UTF8);
					oSW.Write(oBody);
					oSW.Close();
					oFSO.Close();
				} catch(e) {
					// 错误处理
					FiddlerObject.log("Error writing to file: " + e.toString());
				}
			}else{
				//oSessions[x].utilDecodeResponse();//消除保存的请求可能存在乱码的情况
				var fso;
				var file;
				fso = new ActiveXObject("Scripting.FileSystemObject");
				var response_string = oSessions[x].GetResponseBodyAsString()
				//MessageBox.Show(response_string);
				var response_string_pars = request_pars_receive(response_string)
				//FiddlerApplication.Log.LogString("yzq_log13: " + response_string_pars);
				var response_json = Fiddler.WebFormats.JSON.JsonDecode(response_string_pars);
				var response_string_changed = Fiddler.WebFormats.JSON.JsonEncode(response_json.JSONObject);
				
				
				//文件保存路径,可自定义
				file = fso.OpenTextFile(filename, 2, true, true);
				file.writeLine(response_string_changed);
				file.close();
			}
			// Clipboard.SetText 设置到剪贴板
			Clipboard.SetText(reg_rule);
			MessageBox.Show("1.json 文件已保存\n\n2.匹配规则已复制到剪贴板");
		}
	

		//MessageBox.Show(Session[].port);
		
	}
		
			
	// Copy Uri For Full API
	public static ContextAction("Copy Uri For Full API")
	function CopyUriForApi(oSessions: Session[]) {
		for (var x = 0; x < oSessions.Length; x++){
			//MessageBox.Show(oSessions[x]);
			//MessageBox.Show(oSessions[x].fullUrl);
			//MessageBox.Show(oSessions[x].GetResponseBodyAsString());
			var url = oSessions[x].url;
			var fullUrl = oSessions[x].fullUrl;
			var reg = /\/.*\?/;
			var a = url.match(reg);
			//MessageBox.Show(a);
			if(a !== null){
				//MessageBox.Show(a[0].replace(/\?/g,""));
				var regUrl = a[0].replace(/\?/g,"")
				Clipboard.SetText(regUrl);
			}else{
				var reg = /\/.*/;
				var a = url.match(reg);
				Clipboard.SetText(a[0]);	
				}
		}
	}
			
	
	// Copy Uri For Yapi
	public static ContextAction("Copy Uri For Yapi")
	function CopyUri(oSessions: Session[]) {
		for (var x = 0; x < oSessions.Length; x++){
			//MessageBox.Show(oSessions[x]);
			//MessageBox.Show(oSessions[x].fullUrl);
			//MessageBox.Show(oSessions[x].GetResponseBodyAsString());
			var url = oSessions[x].url;
			//MessageBox.Show(url);
			var fullUrl = oSessions[x].fullUrl;
			var reg = /\/.*\?/;
			var a = url.match(reg);
			//MessageBox.Show(a);
			if(a !== null){
				//MessageBox.Show(a[0].replace(/\?/g,""));
				var regUrl = a[0].replace(/\?/g,"").replace(/.*api/g,"")
				Clipboard.SetText(regUrl);
			}else{
				var reg = /\/.*/;
				var a = url.match(reg);
				Clipboard.SetText(a[0]);
				}
			}
		}
	
	// Copy Uri For Python Function
	public static ContextAction("Copy Uri For Python Function")
	function CopyUriForPython(oSessions: Session[]) {
		for (var x = 0; x < oSessions.Length; x++){
			//MessageBox.Show(oSessions[x]);
			//MessageBox.Show(oSessions[x].fullUrl);
			//MessageBox.Show(oSessions[x].GetResponseBodyAsString());
			var url = oSessions[x].url;
			var reg = /\/.*\?/;
			var a = url.match(reg);
			if(a !== null){
				//MessageBox.Show(a[0].replace(/\?/g,""));
				var reg_uri = a[0].replace(/\?/g,"").replace(/.*api/g,"").replace(/\//g,"_").replace(/^(\s|_)+|(\s|_)+$/g, '')	
			}else{
				var reg = /\/.*/;
				var a = url.match(reg);
				var reg_uri = a[0].replace(/\?/g,"").replace(/.*api/g,"").replace(/\//g,"_").replace(/^(\s|_)+|(\s|_)+$/g, '')
				}
			//var path_url = oSessions[x].fullUrl;
			Clipboard.SetText(reg_uri);
				
		}
	}

 

说明: Fiddler 版本号是  v5.0.20192.25091 for .NET 4.6.1

^_^
请喝咖啡 ×

本作品由 卓越笔记 采用 知识共享署名 - 非商业性使用 - 相同方式共享 4.0 国际许可协议 进行许可

前一篇: Fiddler rules 下添加功能选项(一键弱网测试)
captcha