一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种报文解析的方法、装置、计算机设备及存储介质与流程

2022-02-19 04:03:43 来源:中国专利 TAG:
1.本发明涉及报文解析
技术领域
:,更为具体来说,本发明能够提供一种报文解析的方法、装置、计算机设备及存储介质。
背景技术
::2.在传统报文的解析方法中,由于报文中的内容格式固定且位置固定,只需要按照设定方式对报文进行解析即可。然而随着网络通信技术的不断发展,由于信息传输量的增大和安全性要求的提高,报文中的内容格式和位置往往不再固定,而是以适应数据载荷等传输需要为目标动态变化的,特别是报文中内容位置的变化。其中,最常见的是请求头内容出现折行的情况,现有技术经常出现难以解析存在折行的请求头内容或容易出现解析结果错误的问题。技术实现要素:3.为解决现有技术存在的难以解析存在折行的请求头内容或解析结果错误的问题,本发明实施例能够提供一种报文解析的方法、装置、计算机设备及存储介质,以达到提高报文解析准确性和成功率等技术目的。4.为实现上述技术目的,本发明能够提供一种报文解析的方法,该方法可包括但不限于如下的一个或多个步骤。5.读取报文中当前行的请求头内容。6.对所述请求头内容中包含的第一预设字符的下一个字符进行识别,以得到所述下一个字符的识别结果。7.根据所述识别结果为第二预设字符,则将所述第二预设字符之后的请求头内容与所述第一预设字符之前的请求头内容进行拼接。8.进一步地,该报文解析的方法还包括:9.根据所述识别结果为第三预设字符,则对当前已经读取的请求头内容进行字符匹配处理。10.其中,所述第三预设字符与所述第二预设字符不同。11.进一步地,所述对当前已经读取的请求头内容进行字符匹配处理包括:12.将已经读取的当前行的请求头内容拷贝至匹配缓冲区中。13.在所述匹配缓冲区中执行字符匹配过程。14.进一步地,所述第一预设字符为换行字符。15.所述第二预设字符为空格字符或制表符。16.进一步地,所述读取报文中当前行的请求头内容包括:17.若请求头内容中的当前字符不是第一预设字符,将所述当前字符拷贝至临时缓冲区中。18.若请求头内容中的当前字符是第一预设字符,则结束当前行的请求头内容的读取。19.进一步地,所述将所述第二预设字符之后的请求头内容与所述第一预设字符之前的请求头内容进行拼接包括:20.在所述临时缓冲区中将所述第二预设字符之后的请求头内容与所述第一预设字符之前的请求头内容进行拼接,以得到拼接后的完整的请求头内容。21.将所述拼接后的完整的请求头内容拷贝至会话缓冲区中。22.进一步地,所述在所述临时缓冲区中将所述第二预设字符之后的请求头内容与所述第一预设字符之前的请求头内容进行拼接包括:23.删除在所述临时缓冲区中已缓存的第一预设字符。24.跳过所述第二预设字符。25.读取所述第二预设字符之后的请求头内容至所述临时缓冲区。26.将所述第二预设字符之后的请求头内容与所述第一预设字符之前的请求头内容进行拼接。27.进一步地,该报文解析的方法还包括:28.根据所述识别结果为空,则确定所述报文的最后一个字符为第一预设字符。29.读取所述报文的下一条报文,以判断出请求头内容是否分在至少两个报文中发送。30.进一步地,该报文解析的方法还包括:31.对拼接后的请求头内容进行解码。32.为实现上述的技术目的,本发明还有一些实施例可提供一种报文解析的装置,该装置可包括但不限于内容读取模块、字符识别模块以及内容拼接模块。33.内容读取模块,用于读取报文中当前行的请求头内容。34.字符识别模块,用于对所述请求头内容中包含的第一预设字符的下一个字符进行识别,以得到所述下一个字符的识别结果。35.内容拼接模块,用于根据所述识别结果为第二预设字符,则将所述第二预设字符之后的请求头内容与所述第一预设字符之前的请求头内容进行拼接。36.为实现上述的技术目的,本发明还有一个或多个实施例能够提供一种计算机设备,该计算机设备包括但不限于存储器和处理器,所述存储器中存储有计算机可读指令,所述计算机可读指令被所述处理器执行时,使得所述处理器执行本发明任一实施例中的所述报文解析的方法的步骤。37.为实现上述的技术目的,本发明还有另一些实施例可提供一种存储有计算机可读指令的存储介质,该计算机可读指令被一个或多个处理器执行时,使得所述一个或多个处理器执行本发明任一实施例中的所述报文解析的方法的步骤。38.本发明的有益效果为:39.基于对请求头内容折行情况的有效判断,本发明能够对存在折行情况的报文内容进行准确地内容检测,可保证待处理的报文中的请求头内容是完整的,本发明据此能够避免对某一请求头内容包含的多行字符分开进行解码而导致解码失败的问题,从而提高报文解析的成功率,进而提高网络数据传输的可靠性。40.本发明能够对报文中存在折行情况的header域内容进行正常解析,以及能够对折行的位置处于不同报文之间的情况下实现跨包内容的正常匹配,本发明还能够实现被编码的header域内容准确地匹配到完整内容。本发明能够部署于多种应用场合下的报文处理方案中,适用范围非常广,市场价值较高。附图说明41.图1示出了本发明一个或多个实施例基于识别结果为第二预设字符的报文解析的方法的流程示意图。42.图2示出了本发明一个或多个实施例基于识别结果为第三预设字符的报文解析的方法的流程示意图。43.图3示出了本发明一个或多个实施例基于识别结果为空的报文解析的方法的流程示意图。44.图4示出了本发明一个或多个实施例中处理任一行请求头内容的伪代码的实现流程示意图。45.图5示出了本发明一个或多个实施例基于识别结果为第二预设字符的报文解析的装置的组成示意图。46.图6示出了本发明一个或多个实施例中计算机设备内部的结构组成示意图。具体实施方式47.下面结合说明书附图对本发明所提供的一种报文解析的方法、装置、计算机设备及存储介质进行详细的解释和说明。48.如图1所示,本发明一个或多个实施例具体能够提供一种报文解析的方法,该方法可包括但不限于如下的一个或多个步骤。49.首先,读取报文中当前行的请求头内容,即对报文中当前行的header域内容(请求头内容)进行读取。50.本发明所涉及的报文是指设备间通信交互过程中的报文,例如可包括但不限于客户端(client)向服务器(server)发送的内容或服务器(server)向客户端(client)发送的内容。51.其中,当前行的请求头内容例如可以表示为header_name:xxxxx\r\n。其中,header_name表示请求头名,不同的请求头名携带了不同的信息,例如请求头名content‑type可用于表示请求体的格式;xxxxx表示请求头内容,\r\n表示结束符。对于折行的情况,本发明一个或多个实施例中的当前行的请求头内容例如可以表示如下:52.header_name:xxxx\r\n53.0x20xxx\r\n54.如图4所示,对于任一行待读取的请求头内容,本发明实施例开始可传入报文当前处理的位置和当前报文待处理的长度,并可在一行处理完成后修正报文的处理位置和待处理长度。即随着当前行字符的判断,报文的处理位置和待处理的长度会发生变化,通过该方式本发明能够判断出是否到达了当前行的尾部。55.为提高数据处理速度和避免数据混淆,本实施例读取报文中当前行的请求头内容包括:若请求头内容中的当前字符不是第一预设字符,将当前字符拷贝至临时缓冲区中,实现当前行内字符逐一地进行读取和判断;若请求头内容中的当前字符是第一预设字符,则结束当前行的请求头内容的读取。本实施例中的第一预设字符为换行字符(\n),当然,在本发明技术方案的基础上,第一预设字符也可以是字符组合(\r\n)。应当理解的是,在本发明技术方案的基础上,第一预设字符可根据操作系统环境的变化而进行相应改变。56.如图4所示,本发明一些实施例可通过已遍历字符数是否小于已缓存字符长度作为判断条件,如果是,说明当前行还有字符未进入临时缓冲区,如果否,说明当前行所有字符都被拷贝到临时缓冲区内,可见本发明能够将一行字符读取至临时缓冲区中,本实施例能够基于行缓存解析协议逐行地读取header域内容。应当理解的是,本发明所涉及的行缓存理解为:把数据所在的数据块调入缓存中,以使得整块数据的读取都从缓存中进行;结合上述说明,本发明基于行缓存对header域内容一行一行地进行读取。57.其次,对请求头内容中包含的第一预设字符的下一个字符进行识别,以得到下一个字符的识别结果。以第一预设字符为\n为例,本发明能够在字符读取过程中遇到\n时,窥探\n的下一个字符。58.本实施例能够在读取过程中遇到\n时判断已遍历所有的字符数是否等于已缓存的所有的字符长度,并可在结果为是的条件下可说明本报文的末尾是\n、等待下一个报文,或者在结果为否的条件下识别下一个字符。59.最后,根据识别结果为第二预设字符,则将第二预设字符之后的请求头内容与第一预设字符之前的请求头内容进行拼接。在经过至少一次拼接过程后,本发明实现了对折行情况下的请求头内容的读取,从而能够获得完整的请求头内容和对请求头内容进行解码。本实施例中的第二预设字符为空格字符(0x20)或制表符(0x09)。其中,空格字符(0x20)对应空格键,制表符(0x09)对应tab键。应当理解的是,在本发明所提供的技术方案的基础上,第二预设字符可根据操作系统环境的变化而进行相应改变。60.本发明一些实施例中将第二预设字符之后的请求头内容与第一预设字符之前的请求头内容进行拼接包括:本发明可在临时缓冲区中将第二预设字符之后的请求头内容与第一预设字符之前的请求头内容进行拼接,以在临时缓冲区中得到拼接后的完整的请求头内容;然后可将临时缓冲区中拼接后的完整的请求头内容拷贝至会话缓冲区中。61.可选地,本发明可选实施例中在临时缓冲区中将第二预设字符之后的请求头内容与第一预设字符之前的请求头内容进行拼接包括:删除在临时缓冲区中已缓存的第一预设字符,以避免第一预设字符作为请求头内容而被后续处理,跳过第二预设字符,以避免第二预设字符作为请求头内容而被后续处理;然后读取第二预设字符之后的请求头内容至临时缓冲区,以实现本发明将第二预设字符之后的请求头内容与第一预设字符之前的请求头内容进行拼接,通过上述方式达到了消除折行带来的难以获取完整的请求头内容的问题,相当于实现了类似于直接获取一行完整的请求头内容的效果。62.结合图4中内容,本发明一个或多个实施例可通过如下的伪代码实现上述的执行过程。对于其中涉及的符号,本发明中的datalen用于表示已缓存的字符长度,result表示当前行是否完整,result_wait用于表示不完整,result_success可用于表示完整,waitwspflag用于表示上一个报文结束位置刚好是\n情况下需等待下一个报文确认上一个报文的请求头内容是否获取完整。63.64.[0065][0066]return等待处理下一个header_name;[0067]本发明能够在识别结果为第二预设字符情况下有效地解决由于折行导致的请求头内容获取不准确和由此引发的其他问题,本发明技术方案在具体实施时,对于不同的识别结果,本发明对应地提供了不同的执行策略。[0068]如图2所示,根据该识别结果不是第二预设字符、而是第三预设字符,则对当前已经读取的请求头内容进行字符匹配处理。其中,第三预设字符与第二预设字符不同。即,如果识别结果为除第二预设字符外的其他字符,说明当前行的请求头内容是完整的,不存在折行情况,则对读取的完整的请求头内容直接进行字符匹配处理。[0069]可选地,本发明的字符匹配处理例如可为ac匹配(aho—corasiek,多模式匹配)的过程,当然并不限于此。[0070]可选地,本发明一个或多个实施例对当前已经读取的请求头内容进行字符匹配处理包括:将已经读取的当前行的请求头内容拷贝至匹配缓冲区中,在匹配缓冲区中执行字符匹配过程。通过在匹配缓冲区执行字符匹配的过程,本发明能够有效避免已缓存的其他字符对匹配过程的影响,减少意外情况的发生。[0071]如图3所示,根据识别结果为空,则能够确定报文的最后一个字符为第一预设字符,再读取报文的下一条报文,以判断出请求头内容是否分在至少前后相邻的两个报文中分包发送。本发明能够通过如上方式确定当前报文是否完整,是否还有报文内容记录于下一条报文中。本发明可基于该方式能够较好地适应tcp交互过程中客户端向服务器或服务器向客户端发送的内容被分在连续的不同tcp报文中进行发送的情况,例如,由于传输内容过长导致的传输内容分在多个报文中发送的情况。[0072]如图4所示,本实施例可在会话中记录一个标记waitwspflag,用于表示上一个报文结束位置刚好是第一预设字符(例如\n)情况下,需等待下一个报文确认上一个报文的请求头内容是否获取完整,本发明具体实施过程能够在传入报文当前处理位置和待处理长度后进行一次判断,如果为真(true),则说明上一个报文的请求头内容未获取完整,如果不为真,则从首个字符开始进行当前行的请求头内容是否完整的判断。对于判断结果为真的情况本发明可通过如下的伪代码实现。[0073][0074][0075]可理解的是,本发明中涉及的临时缓冲区、会话缓冲区、匹配缓冲区均属于缓存区。[0076]对于经过编码的报文,本发明可在获取到拼接完成的完整请求头内容之后,基于完整请求头内容选择合适的编解码工具,编解码工具例如base64、quote‑printable等;利用编解码工具对完整请求头内容进行解码。[0077]本发明一些实施例可根据当前行字符数量小于预设值判断当前行为空行,该预设值例如可以为2。对于当前请求头名是空行的情况,则标志整个请求头部分的结束,接下来要处理的是body域内容(请求体内容)。应当理解的是,本发明重点关注的是对报文中header域内容的解析。对于报文中body域内容(请求体内容)的处理方式,本发明可从已有的处理方式中进行选择,本发明不再进行赘述。[0078]如图5所示,与报文解析的方法基于同一发明技术构思,本发明一个或多个实施例还能够提供一种报文解析的装置。该装置包括但不限于内容读取模块、字符识别模块以及内容拼接模块,具体说明如下。[0079]内容读取模块,可用于读取报文中当前行的请求头内容。[0080]具体地,本发明中的内容读取模块用于根据请求头内容中的当前字符不是第一预设字符将当前字符拷贝至临时缓冲区中,或者用于根据请求头内容中的当前字符是第一预设字符结束当前行的请求头内容的读取。[0081]字符识别模块,可用于对请求头内容中包含的第一预设字符的下一个字符进行识别,以得到下一个字符的识别结果。本发明中的第一预设字符例如可以为换行字符。[0082]内容拼接模块,可用于根据识别结果为第二预设字符,则将第二预设字符之后的请求头内容与第一预设字符之前的请求头内容进行拼接。本发明中的第二预设字符例如可以为空格字符或制表符。[0083]可选地,内容拼接模块可用于在临时缓冲区中将第二预设字符之后的请求头内容与第一预设字符之前的请求头内容进行拼接,以得到拼接后的完整的请求头内容;内容拼接模块还可用于将拼接后的完整的请求头内容拷贝至会话缓冲区中。[0084]更为具体地,内容拼接模块用于在删除在临时缓冲区中已缓存的第一预设字符和跳过第二预设字符之后读取第二预设字符之后的请求头内容至临时缓冲区,以及用于将第二预设字符之后的请求头内容与第一预设字符之前的请求头内容进行拼接。[0085]本发明中报文解析的装置还包括字符匹配模块。字符匹配模块可用于根据识别结果为第三预设字符对当前已经读取的请求头内容进行字符匹配处理;其中,本发明第三预设字符与第二预设字符不同。[0086]具体地,字符匹配模块将已经读取的当前行的请求头内容拷贝至匹配缓冲区中,以及用于在匹配缓冲区中执行字符匹配过程。[0087]本发明中报文解析的装置还可包括分包判断模块。分包判断模块用于根据识别结果为空确定报文的最后一个字符为第一预设字符,并用于通过读取报文的下一条报文的方式判断出请求头内容是否分在至少两个报文中发送。[0088]本发明中报文解析的装置还可包括报文解码模块,报文解码模块用于对拼接后的请求头内容进行解码,报文解码模块具体可用于在会话缓冲区中对请求头内容进行解码。[0089]如图6所示,与本发明中报文解析的方法基于同一发明技术构思,本发明一个或多个实施例还能够提供一种计算机设备。[0090]该计算机设备可包括但不限于存储器和处理器,存储器中存储有计算机可读指令,计算机可读指令被处理器执行时,使得处理器执行本发明任一实施例中的报文解析的方法的步骤;其中,报文解析的方法的详细步骤在本说明书中已有详细的记载,此处不再进行赘述。[0091]如图6所示,与本发明中报文解析的方法基于同一发明技术构思,本发明一个或多个实施例中还能够提供一种存储有计算机可读指令的存储介质,计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行本发明任一实施例中的报文解析的方法的步骤;其中,报文解析的方法的详细步骤在本说明书中已有详细的记载,此处不再进行赘述。[0092]综上所述,本发明基于对请求头内容折行情况的有效判断实现对存在折行情况的报文内容进行准确地内容检测,从而能够保证待处理的请求头内容是完整的。[0093]在此基础上,本发明可避免对某一请求头内容包含的多行字符分开解码而导致解码失败的问题,从而提高报文解析的成功率,进而提高网络数据传输的可靠性。[0094]本发明能够对报文中有折行情况的header域内容进行正常解析,还可对折行的位置处于某一报文尾部的情况下实现跨包内容的正常匹配,本发明还能够实现已经被编码的header域内容准确地匹配到完整的内容。[0095]在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读存储介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,"计算机可读存储介质"可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读存储介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(ram,randomaccessmemory),只读存储器(rom,read‑onlymemory),可擦除可编辑只读存储器(eprom,erasableprogrammableread‑onlymemory,或闪速存储器),光纤装置,以及便携式光盘只读存储器(cdrom,compactdiscread‑onlymemory)。另外,计算机可读存储介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。[0096]应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(pga,programmablegatearray),现场可编程门阵列(fpga,fieldprogrammablegatearray)等。[0097]在本说明书的描述中,参考术语“本实施例”、“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。[0098]此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本发明的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。[0099]以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明实质内容上所作的任何修改、等同替换和简单改进等,均应包含在本发明的保护范围之内。当前第1页12当前第1页12
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献