
由于工作原因,需要把上图所示的待办文件按接收时间逆序分列(即把最早收到的文件排到第一个,现在的环境是最新收到的文件排在第一个),尝试点击“接收时间”排序后发现只有一种方式,并不能满足需求,以是问了工程师能不能增长一种排序方式,然而我已经预测到了会回答不能 (我跟工程师提过频频需求,没一次能解决,全是自己搞定的,无语。。。,由于OA是人家公司做的,签维保合同时只能和做体系的公司签,以是人家不做也没办法)

先F12调试一下看看什么环境

大致翻一下,可以发现gettodolist这个可疑项,从字面看是“获取待办列表”的意思,点开看看响应数据:

果然是。把JSON数据格式化一下:

结构一目了然。total是待办文件的总数,content是一个文件信息的列表,ROW_NUM应该是该文件地点的行数,以是,现在的思绪如下;

1.拦截访问http://172.16.61.237/spring/officeList/getTodoList时服务器返回的JSON数据
2.把数据中的content里的内容逆序分列,然后把每个文件信息的ROW_NUM从1赋值到total
开始之前,需要考虑一个题目:ROW_NUM是否决定了文件地点行呢?用fiddler拦截一下手工修改数据就知道了,答案是肯定的,我已经试过了。
下面开始编写程序。
fiddler脚本可以用两种语言编写,这两种我都没学过,以是就先查了下哪种语言参考资料较多就选用哪种,我选的是C#,由于本人python用的比较多,以是处理数据的部门用python实现。

要拦截响应数据,以是Go to那边选择第二项,会跳转到相应代码处

然后在OnBeforeResponse函数内添加如下代码:
[C#] 纯文本查看 复制代码if(oSession.fullUrl.Contains("getTodoList")){//判定URL中是否含getTodoList //FiddlerObject.alert(oSession.fullUrl); var responseStr = oSession.GetResponseBodyAsString();//获取响应数据 //FiddlerObject.alert(responseStr); System.IO.File.WriteAllText(@"C:\filedata.json", responseStr);//把响应数据写入文件 Process.Start("C:\\reverselist.vbs");//调用python程序处理数据 Thread.Sleep(1000); var alterJsonStr = System.IO.File.ReadAllText(@"C:\filedata.json"); oSession.utilSetResponseBody(alterJsonStr); //把修改后的数据写回,实现篡改}

reverselist.vbs:
[Visual Basic] 纯文本查看 复制代码set ws = createobject("wscript.shell")ws.Run "D:\software\py\python.exe C:\reverselist.py",0
reverselist.py:
[Asm] 纯文本查看 复制代码# -*- coding: UTF-8 -*-import jsonwith open('C:\\filedata.json', 'r',encoding='UTF-8') as f: data = json.load(f)contentlist = data["content"]contentlist.reverse()num = 1;for fileObject in contentlist: fileObject["ROW_NUM"] = num num = num + 1data["content"] = contentlistwith open('C:\\filedata.json', 'w') as f: json.dump(data, f)
测试一下,乐成:

来源:http://www.12558.net
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |