• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

【Hook】postman工具的代码生成工具让它锦上添花

JAVA相关 鱼东东 2865次浏览 0个评论

 

修改postman工具的代码生成工具加入response自动生成POJO代码

【Hook】postman工具的代码生成工具让它锦上添花

如上图可以快速把请求这个动作转成code,减少重复性劳动。

但是有一点我觉得可以优化下 就是返回的json如果也能自动转成代码就好了。

不然在需要把json序列化成java或者csharp的POJO对象时还得自己coding转一遍。

由于最近经常会用到这个功能,虽然我找到一个站点把json复制粘贴进去,然后点个按钮就可以转成POJO,但是我觉得还是有很多重复性的劳动。

对我我这种懒人,postman又没有提供可扩展的功能。该怎么办呢?

分析postman

 

postman是基于Electron框架的一个产品,如下图可以把ChromeTool打开

【Hook】postman工具的代码生成工具让它锦上添花

尝试一:LocalOverrides功能

这个功能可以修改代码后 保存到你的本机磁盘,然后下一次就会检测 如果有设置localOverrides的话就用你修改过后的代码!

结论:postman比较是一个商业工具,它内部有检测机制,开启这个功能就会不能正常使用!所以放弃! 【Hook】postman工具的代码生成工具让它锦上添花

尝试二:直接修改postman的源码

1.定位到postman的源码如下图是一个asar文件

【Hook】postman工具的代码生成工具让它锦上添花

2.安装asar工具解压到本地

安装asar工具

npm install -g asar

【Hook】postman工具的代码生成工具让它锦上添花

定位到postman的asar目录解压出来


asar extract app.asar app

【Hook】postman工具的代码生成工具让它锦上添花

3.找到源码

找源码的过程我就不说了 这里面要实现我上面说的功能 需要修改2个js源码

  • vendor-shared.js –》这是postman的主源码 有几百万行代码
  • postman-code-generators.js –》这个是代码生成的逻辑
4. 修改vendor-shared.js源码

定位到483842行 加入代码

代码的作用:在点击发送请求后,postman拿到代码如果是json格式的话 就存到本地缓存中

【Hook】postman工具的代码生成工具让它锦上添花

const transformResponseForLanguage = {
  json: function (value) {
    // This unescape step handles escape sequences like -
    // 1. Unicode code points - hexadecimal - fixed length - \uD834
    // 2. Special escape characters - \/
	// 这里加
	try {
		localStorage.setItem('_current_reponse_json', value);
	} catch (e) {
		
	}
    return Object(_js_modules_services_StringUnescape__WEBPACK_IMPORTED_MODULE_9__["unescape"])(value);
  } };

【Hook】postman工具的代码生成工具让它锦上添花

4. 修改postman-code-generators.js源码

原理说明:这里是在网上找了一个接口,传json就可以转成代码

这里注意一下,用的xhr,同步的方式调用

(异步的方式postman我测试了不行,因为postman的上游代码是直接拿结果的,改成异步的话上游代码也得改,这个功能其实同步也还好,就比之前稍微慢了1秒左右)

  1. 定位到632行 这里是生成csharp代码
	//下面加入jsonPOJO的代码
try {
	var input = localStorage.getItem('_current_reponse_json');
	var code = '';
	if(input){
		var requestType = {
			input : input,
			operationid:"jsontocsharp",
			settings:{
				UsePascalCase:true,
				UseJsonAttributes:false,
				UseFields:false,
				UseJsonPropertyName:false
			}
		};
		var data = JSON.stringify(requestType);
		var xhr = new XMLHttpRequest();
		xhr.addEventListener("readystatechange", function() {
		  if(this.readyState === 4) {
			var next = false;
			var result = [];
			for(var i = 0;i< this.responseText.length;i++)
			{
				var item = this.responseText[i];
				if(item == '\"'){}
				else if(item == "\\" || item == "/"){next = true}
				else if(next){next = false,result.push("\n")}
				else{result.push(item)}
			}
			code= '\n //Deserialize json response to POJO \n'+result.join("").replace('myJsonResponse','response.Content');	
		  }
		});

		xhr.onerror = function () {
         return callback(null, headerSnippet + snippet + footerSnippet);
        }
		xhr.open("POST", "https://json2csharp.com/api/Default",false);
		xhr.setRequestHeader("Accept", "*/*");
		xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
		xhr.setRequestHeader('Content-type', 'application/json');
		xhr.send(data);
		
		return callback(null, headerSnippet + snippet + code + footerSnippet);
	}
} catch (e) {
	return callback(null, headerSnippet + snippet + footerSnippet);
}

  1. 定位到16668行 这里是生成java代码

//下面加入jsonPOJO的代码
try {
	var input = localStorage.getItem('_current_reponse_json');
	var code = '';
	if(input){
		var requestType = {
			input : input,
			operationid:"jsontopojo",
			settings:{
				UseProperties:false
			}
		};
		var data = JSON.stringify(requestType);
		var xhr = new XMLHttpRequest();
		xhr.addEventListener("readystatechange", function() {
		  if(this.readyState === 4) {
			var next = false;
			var result = [];
			for(var i = 0;i< this.responseText.length;i++)
			{
				var item = this.responseText[i];
				if(item == '\"'){}
				else if(item == "\\"){next = true}
				else if(next){next = false,result.push("\n")}
				else{result.push(item)}
			}
			code= '\n //Deserialize json response to POJO \n'+result.join("").replace('myJsonResponse','response.Content');	
		  }
		});

		xhr.onerror = function () {
         return callback(null, headerSnippet + snippet + footerSnippet);
        }
		xhr.open("POST", "https://json2csharp.com/api/Default",false);
		xhr.setRequestHeader("Accept", "*/*");
		xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
		xhr.setRequestHeader('Content-type', 'application/json');
		xhr.send(data);
		
		snippet = snippet + code;
	}
} catch (e) {
	
}

【Hook】postman工具的代码生成工具让它锦上添花

5.源码修改后重新打包成asar文件

asar pack app app.asar

【Hook】postman工具的代码生成工具让它锦上添花

搞定验证结果

java的方式

【Hook】postman工具的代码生成工具让它锦上添花

csharp的方式

【Hook】postman工具的代码生成工具让它锦上添花

【Hook】postman工具的代码生成工具让它锦上添花


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明【Hook】postman工具的代码生成工具让它锦上添花
喜欢 (0)

您必须 登录 才能发表评论!

加载中……