一种HTTP服务器数据拦截的方法、装置和存储介质与流程

文档序号:30064280发布日期:2022-05-18 00:29阅读:359来源:国知局
一种HTTP服务器数据拦截的方法、装置和存储介质与流程
一种http服务器数据拦截的方法、装置和存储介质
技术领域
1.本发明涉及接口测试技术,具体涉及一种http服务器数据拦截的方法、装置和存储介质。


背景技术:

2.在接口自动化测试中,接口测试工具需要根据接口的输入输出参数,生成接口请求数据包,实现和被测服务程序的交互。接口信息包括接口的输入输出参数和服务路径,如果是http服务,还需要知道请求的方法method,请求格式request contenttype和应答格式response contenttype。在接口测试的实施过程中,经常遇到接口变更,导致接口文档和实际的接口参数不一致,有些应用系统甚至没有接口说明文档,在编写接口测试脚本时,需要花费大量的时间确认接口的实际参数。一种解决方法就是在网络中拦截请求和应答数据,直接生成接口配置信息,或者和已经配置的接口信息进行比对。
3.现有的网络数据拦截有三种方式。
4.方法1:在客户端pc上拦截网络数据;如果客户端是web浏览器,在浏览器的开发工具中能看到请求和应答数据;如果客户端是手机app,需要配置网络代理,从fiddler、wireshark等网络过滤器工具中抓取报文;如果是windows客户端程序,也可以使用fiddler、wireshark等工具拦截报文。这种方式的局限性在于:1、如果数据是加密的,拦截到的数据是密文;2、一次服务请求,可能会产生大量的辅助请求,比如一次表单提交,会触发很多下载图片文件、js文件、css文件等额外的http请求,无法快速的在其中找到核心数据;3、拦截到的数据需要手工复制到接口分析工具中,尤其是请求头中的数据,操作很不方便。
5.方法2:在网络上拦截tcp数据,需要在专用的路由器上配置旁路或映射端口,并设置过滤规则拦截指定ip和端口的数据。这种方法比较通用,除了拦截http数据,也可以拦截所有tcp数据,这种方式的局限性在于,1、需要专用的路由器,由专业人员配置旁路;2、当并发量比较大时,拦截的数据量比较大,很难找到需要的数据;3、拦截的是tcp数据,需要从中提取并解析http数据;4、需要配对请求和应答数据;5、加密数据需要解密;6、数据采集量比较大,很难实时采集数据并提供给测试人员。
6.方法3:在web服务程序中增加拦截器filter,在拦截器的dofilter方法中包装httpservletrequest和httpservletresponse这两个对象,拦截这两个对象中的inputstream和outputstream变量,在操作输入输出流时增加旁路处理,把数据记录到缓存中。这种方法需要修改服务程序的源程序,需要为测试环境和生产环境发布两种运行包,并且所有需要监控的服务程序都需要完成这种修改,实施难度比较大。


技术实现要素:

7.针对现有技术的不足,本发明公开了一种http服务器数据拦截的方法、装置和存储介质。
8.本发明所采用的技术方案如下:
9.一种http服务器数据拦截的方法,包括以下步骤:
10.加载步骤,在服务程序启动时加载agent文件;
11.注入步骤,在agent文件中注入监控程序;
12.替换步骤,在agent文件中插入新的过滤方法用于拦截所述服务程序中原始的过滤方法;
13.配置步骤,在新的过滤方法中配置过滤规则,采集事务类接口的输入输出报文数据;
14.数据发送步骤,发送所述报文数据。
15.其进一步的技术方案为:在所述加载步骤中,修改服务程序的启动脚本,增加jvm启动参数-javaagent:agent文件;在agent文件中,实现一个classfiletransformer类,用于修改所述服务程序。
16.其进一步的技术方案为:在所述注入步骤中,分析和识别web容器或应用框架的类型,并根据web容器或应用框架的类型,确定需要修改的类装载器,将监控程序注入到服务程序中。
17.其进一步的技术方案为:在分析和识别web容器或应用框架的类型之前,对应用类装载器的种类进行判断,并根据应用类装载器的种类确定监控程序的注入方法:
18.如果应用类装载器是jdk提供的,其加载时间可能早于agent,需要通过addurl方法注入监控程序;
19.如果应用类装载器是web容器或应用框架实现的,其加载时间晚于agent,可以修改loadclass方法注入监控程序。
20.其进一步的技术方案为:在所述替换步骤中:
21.配置需要拦截的filter类;
22.插入新的过滤方法用于拦截原始的过滤方法
23.在新的过滤方法中,检查请求是否需要监控;如果请求需要监控,包装httpservletrequest和httpservletresponse类。
24.其进一步的技术方案为:在所述配置步骤中:
25.在httpservletrequest的包装类中,替换getinputstream和getreader方法,返回一个servletinputstream或bufferedreader的包装类,当服务程序从输入流中读取请求数据时,所返回的包装类把所述报文数据加入到请求数据缓存中;
26.在httpservletresponse的包装类中,替换getoutputstream和getwriter方法,返回一个servletoutputstream或printwriter的包装类,当服务程序把应答数据写到输出流时,所返回的包装类把所述报文数据加入到应答数据缓存中。
27.其进一步的技术方案为:所述数据发送步骤包括:
28.利用所述监控程序将所述报文数据发送至监控服务器;
29.监控服务器收到所述报文数据后,推送至监控台;
30.在所述监控台设置过滤模块,过滤并显示所述报文数据。
31.一种http服务器数据拦截的装置,包括以下模块:
32.加载模块,用于在服务程序启动时加载agent文件;
33.注入模块,用于在agent文件中注入监控程序;
34.替换模块,用于在agent文件中插入新的过滤方法用于拦截所述服务程序中原始的过滤方法;
35.配置模块,用于在新的过滤方法中配置过滤规则,采集事务类接口的输入输出报文数据;
36.数据发送模块,用于发送所述报文数据。
37.一种http服务器数据拦截的装置,所述装置包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如上任一项所述方法的步骤。
38.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如上任一项所述方法的步骤。
39.本发明的有益效果如下:
40.1、本发明在http服务器进行数据拦截用于接口测试,所拦截到的数据是没有加密的业务数据,并且已经过滤了非事务性请求,数据简单完整易于分析。
41.2、本发明无需另外的专用设备,也无需配置旁路和映射端口,实施较为简单,简化了网络数据的采集过程,对测试人员操作更加容易和友好。
42.3、本发明无需获取和修改服务程序的源码,而是在服务程序中注入代码,拦截web服务器的请求过程和应答过程,从中提取http请求报文头、请求报文体、http应答报文头、应答报文体,并生成接口配置信息。具体的,针对不同的web服务器和应用框架,注入不同的代码实现,注入的代码主要是拦截web请求,包括堆filter,httprequest,httpresponse等类的拦截。本文根据不同的web容器和应用框架,选择不同的filter类并注入代码;不同的web容器和应用框架,注入的代码也不相同。
43.相对于在web的服务程序中直接增加filter的方法,本发明无需在服务程序的源代码中编写程序,并配置到web服务器中,本发明更加通用,适合于不同形式的服务程序。
附图说明
44.图1为http服务器数据拦截的方法的实施例的流程图。
45.图2为http服务器数据拦截的装置的实施例的结构示意图。
具体实施方式
46.下面结合附图,说明本发明的具体实施方式。
47.实施例1。
48.图1是http服务器数据拦截的方法的实施例的流程图。如图1所示,http服务器数据拦截的方法,包括以下步骤:
49.s1.加载步骤,在服务程序启动时利用javaagent机制加载agent文件:
50.s11.修改服务程序的启动脚本,增加jvm启动参数-javaagent:agent文件。
51.s12.在所加载的agent文件中实现一个classfiletransformer类,用于修改服务程序的二进制代码。
52.s2.注入步骤,在agent文件中利用asm开源技术,修改加载应用的classloader类,
修改loadclass方法,把监控程序注入其中,具体的:
53.s21.对应用类装载器的种类进行判断,并根据应用类装载器的种类确定监控程序的注入方法。
54.例如,如果应用类装载器是sun.misc.launcher$appclassloader(jdk8及以下版本),或jdk.internal.loader.classloaders$appclassloader(jdk9及以上版本),通过urlclassloader的addurl方法注入监控程序;
55.s22.分析和识别web容器或应用框架的类型,并根据web容器或应用框架的类型确定需要修改的类装载器,将监控程序注入到服务程序中。
56.例如:
57.如果服务程序是一个springboot应用,修改org.springframework.boot.loader.launchedurlclassloader类中的loadclass方法,使所述类装载器在加载类文件时,优先加载监控程序中的类文件;
58.如果服务程序在tomcat中运行,修改org.apache.catalina.loader.webappclassloaderbase类中的loadclass方法,使所述类装载器在加载类文件时,优先加载监控程序中的类文件。
59.s3.替换步骤,在agent文件中利用asm开源技术插入新的过滤方法,用于拦截服务程序中原始的过滤方法;具体的:
60.s31.配置需要拦截的filter类;
61.例如:如果是在springboot的应用框架中,可以拦截的类为org.eclipse.jetty.servlets.crossoriginfilter;如果是在springweb的应用框架中,可以拦截的类为org.springframework.web.filter.delegatingfilterproxy;
62.s32.插入新的过滤方法用于拦截服务程序中原始的过滤方法.
63.例如:如果是在springweb应用框架中,需要插入新的dofilterinternal方法用于拦截服务程序中原始的dofilterinternal方法,如果是在springboot的应用框架中,需要插入新的dofilter方法用于拦截服务程序中原始的dofilter方法;
64.s33.在新的dofilter方法或者dofilterinternal方法中,根据规则检查请求是否需要监控,然后包装httpservletrequest和httpservletresponse类。这里的规则是可以用于检查和判断请求是否是事务性请求。
65.s4.配置步骤,在新的过滤方法中配置过滤规则,采集事务类接口的输入输出报文数据;具体的:
66.在httpservletrequest的包装类中,替换getinputstream和getreader方法,返回一个servletinputstream或bufferedreader的包装类,当服务程序从输入流中读取请求数据时,所返回的包装类把报文数据加入到请求数据缓存中;
67.在httpservletresponse的包装类中,替换getoutputstream和getwriter方法,返回一个servletoutputstream或printwriter的包装类,当服务程序把应答数据写到输出流时,所返回的包装类把报文数据加入到应答数据缓存中。
68.当过滤方法,也即dofilter或dofilterinternal结束后,把所采集到的报文数据,连同请求头和应答头,添加到任务队列中,等待发送给监控台。
69.s5.数据发送步骤,利用监控程序发送报文数据。
70.具体的,在s5中包括:
71.s51.利用监控程序将报文数据发送至监控服务器,监控程序注入后,会启动一个日志任务队列,用于接收s4中拦截到的报文数据,并转发至监控服务器;
72.s52.监控台和监控服务器之间采用tcp反向连接方式,在监控台起动时,先连接到监控服务器,建立一个长连接;
73.s53.监控服务器收到报文数据后,推送至监控台;
74.s54.监控台包含一个过滤模块,该过滤模块可以配置过滤条件,根据服务路径、method、sessionid等参数,过滤并显示接口的输入输出数据。
75.根据实施例1的方法,可以在http服务器上进行接口的输入输出数据拦截,以用于接口端的监控,实施较为简单。
76.实施例2。
77.实施例2提供了一种http服务器数据拦截的装置,图2为http服务器数据拦截的装置的实施例的结构示意图。如图2所示,实施例2包括以下模块:
78.加载模块,用于在服务程序启动时加载agent文件;
79.注入模块,在agent文件中注入监控程序;
80.替换模块,在agent文件中插入新的过滤方法用于拦截服务程序中原始的过滤方法;
81.配置模块,在新的过滤方法中配置过滤规则,采集事务类接口的输入输出报文数据;
82.数据发送模块,利用监控程序发送报文数据。
83.实施例2中的装置中的各个模块可以对应的执行实施例1中所示的方法步骤。
84.实施例3。
85.实施例3提供的了一种http服务器数据拦截的装置。该实施例的装置包括处理器、存储器以及存储在存储器中并可在处理器上运行的计算机程序。处理器执行计算机程序时实现实施例1中的步骤。或者,处理器执行计算机程序时实现实施例2中的各模块的功能。
86.计算机程序可以被分割成多个模块,多个模块被存储在存储器中,并由处理器执行以完成本实施例。具体的,多个模块是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述计算机程序在交互界面组合对象的识别操作装置中的执行过程。例如,计算机程序可以被分割成:
87.加载模块,用于在服务程序启动时加载agent文件;
88.注入模块,在agent文件中注入监控程序;
89.替换模块,在agent文件中插入新的过滤方法用于拦截服务程序中原始的过滤方法;
90.配置模块,在新的过滤方法中配置过滤规则,采集事务类接口的输入输出报文数据;
91.数据发送模块,利用监控程序发送报文数据。
92.实施例3中的装置可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。装置可包括但不仅限于处理器、存储器。本领域技术人员可以理解,实施例3还可以包括更多或更少的部件,或者组合某些部件,或者不同的部件,例如还可以包括输入输出设备、
网络接入设备、总线等。
93.处理器可以是中央处理单元(central processing unit,cpu),还可以是其他通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(applicationspecific lntegrated circuit,asic)、现成可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,处理器是交互界面组合对象的识别操作装置的控制中心,利用各种接口和线路连接整个交互界面组合对象的识别操作装置的各个部分。
94.存储器可用于存储计算机程序,处理器通过运行或执行存储在存储器内的计算机程序,以及调用存储在存储器内的数据,实现交互界面组合对象的识别操作装置的各种功能。存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等;存储数据区可存储根据手机的使用所创建的数据等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘等。
95.实施例4。
96.实施例4提供了一种存储介质。
97.http服务器数据拦截的装置如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。该计算机程序在被处理器执行时,可实现实施例1中的步骤。其中,计算机程序包括计算机程序代码,计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。计算机可读介质可以包括:能够携带计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器、随机存取存储器等。
98.以上描述是对本发明的解释,不是对发明的限定,本发明所限定的范围参见权利要求,在不违背本发明的基本结构的情况下,本发明可以作任何形式的修改。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1