日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

抓包写代码模拟怎么减少重复劳动

發布時間:2023/12/4 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 抓包写代码模拟怎么减少重复劳动 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

由于工作需要會經常需要

  • Fiddler抓包

  • Chrome F12抓包

然后根據抓包寫代碼來模擬,

一般來說我都是先抓包,

  • 打開postman把抓來的包放到postman里面模擬請求

  • 然后利用PostMan的生成代碼功能

  • 大部分的Reponse都是Json,為了方反列化接著要打開一個在線工具將json轉成模型(POJO)

前段時間我研究了下postman,覺得json轉POJO這個步驟可以直接在postman的代碼生成器的邏輯里面做掉,是通過修改了postman的源碼的方式實現的。

具體做法:

postman工具的代碼生成工具

image

如上圖可以快速把你的request轉成code,減少重復性勞動。

但是有一點我覺得可以優化下 就是返回的json如果也能自動轉成代碼就好了。

不然在需要把json序列化成java或者csharp的POJO對象時還得自己coding轉一遍。

由于最近經常會用到這個功能,雖然我找到一個站點把json復制粘貼進去,然后點個按鈕就可以轉成POJO,但是我覺得還是有很多重復性的勞動。

對我我這種懶人,postman又沒有提供可擴展的功能。該怎么辦呢?

分析postman

postman是基于Electron框架的一個產品,如下圖可以把ChromeTool打開

嘗試一:LocalOverrides功能

這個功能可以修改代碼后 保存到你的本機磁盤,然后下一次就會檢測 如果有設置localOverrides的話就用你修改過后的代碼!

結論:postman比較是一個商業工具,它內部有檢測機制,開啟這個功能就會不能正常使用!所以放棄!

嘗試二:直接修改postman的源碼

1.定位到postman的源碼如下圖是一個asar文件
image

2.安裝asar工具解壓到本地

安裝asar工具

npm?install?-g?asarimage

定位到postman的asar目錄解壓出來

asar?extract?app.asar?appimage

3.找到源碼

找源碼的過程我就不說了 這里面要實現我上面說的功能 需要修改2個js源碼

  • vendor-shared.js --》這是postman的主源碼 有幾百萬行代碼

  • postman-code-generators.js --》這個是代碼生成的邏輯

4. 修改vendor-shared.js源碼

定位到483842行 加入代碼 就是在點擊發送請求后,postman拿到代碼如果是json格式的話 就存到本地緩存中

imageconst?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);}?};image
4. 修改postman-code-generators.js源碼

原理說明:這里是在網上找了一個接口,傳json就可以轉成代碼 這里注意一下,用的xhr,同步的方式調用(異步的方式postman我測試了不行,因為postman的上游代碼是直接拿結果的,改成異步的話上游代碼也得改,這個功能其實同步也還好,就比之前稍微慢了1秒左右)

  • 定位到632行 這里是生成csharp代碼

  • //下面加入json轉POJO的代碼 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); }
  • 定位到16668行 這里是生成java代碼

  • //下面加入json轉POJO的代碼 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)?{}image

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

    asar?pack?app?app.asarimage

    搞定驗證結果

    java的方式
    image
    csharp的方式
    imageimage

    這個方案不夠完美

    這個方案雖然解決了一部分重復性勞動,還有一點比較惡心的是,每次postman被強制升級后我又得重復搞一下。

    最近又想到了一個新的方案:搞一個fildder的插件,搞出來后我在和大家分享


    我是正東,學的越多不知道也越多。如果決定去深究一個東西, 一定要完全搞懂, 并認真總結一篇博客讓以后能在短時間拾起來 ( 因為不搞懂你很難寫一篇半年后還能理解的博客 )

    歡迎白嫖點贊!

    總結

    以上是生活随笔為你收集整理的抓包写代码模拟怎么减少重复劳动的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。