CN109802996A - 发送网络请求的方法、装置、计算机设备和存储介质 - Google Patents
发送网络请求的方法、装置、计算机设备和存储介质 Download PDFInfo
- Publication number
- CN109802996A CN109802996A CN201811531639.7A CN201811531639A CN109802996A CN 109802996 A CN109802996 A CN 109802996A CN 201811531639 A CN201811531639 A CN 201811531639A CN 109802996 A CN109802996 A CN 109802996A
- Authority
- CN
- China
- Prior art keywords
- network
- request
- client
- network request
- server
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Information Transfer Between Computers (AREA)
Abstract
本申请揭示了一种发送网络请求的方法、装置、计算机设备和存储介质,其中方法包括:客户端构建指定网络请求对象;按照第一预设规则控制所述指定网络请求对象生成第一网络对象及第二网络对象,其中所述第一网络对象及所述第二网络对象均携带有所述服务端当前支持的所述高版本的TLS协议;将所述客户端对应的安卓系统默认使用的网络请求对象替换为所述指定网络请求对象;通过所述第一网络对象及所述第二网络对象,向服务端发送第一网络请求。通过本申请,使得安装有低版本的安卓系统的客户端在请求服务端https接口时,能够正常访问https接口,并获取到服务端所响应的网络数据,有效地避免了因为服务端安全升级而导致的低版本安卓用户的流失问题。
Description
技术领域
本申请涉及通信技术领域,具体涉及一种发送网络请求的方法、装置、计算机设备和存储介质。
背景技术
现有的某些低版本的安卓系统,例如系统版本为android 4.x系统的客户端默认只支持低版本的TLS(Transport Layer Security,安全传输层)协议,例如TLSv1.0协议,当服务端因为安全考虑进行了升级后,则会出现升级后的服务端只支持一些新版本或较高版本的TLS协议时,例如TLSv1.2协议或TLSv1.1协议,则低版本的安卓系统的客户端向升级后的服务端请求https接口时就会失败,导致低版本的安卓系统的客户端无法正常访问网络数据。
发明内容
本申请的主要目的为提供一种发送网络请求的方法、装置、计算机设备和存储介质,旨在解决现有的低版本的安卓系统的客户端向升级后的服务端请求Https接口时会失败,导致低版本的安卓系统的客户端无法正常访问网络数据的技术问题。
本申请提出一种发送网络请求的方法,用于安装有低版本的安卓系统的客户端向支持高版本的TLS协议的服务端发送网络请求,所述方法包括步骤:
客户端构建指定网络请求对象;
按照第一预设规则控制所述指定网络请求对象生成第一网络对象及第二网络对象,其中所述第一网络对象及所述第二网络对象均携带有所述服务端当前支持的所述高版本的TLS协议;
将所述客户端对应的安卓系统默认使用的网络请求对象替换为所述指定网络请求对象;
通过所述第一网络对象及所述第二网络对象,向服务端发送第一网络请求。
可选地,所述按照第一预设规则控制所述指定网络请求对象生成第一网络对象及第二网络对象的步骤,包括:
获取与所述客户端对应的所述安卓系统的版本信息;
根据所述版本信息,从预设的协议数据库中选取与所述版本信息对应的指定TLS协议数组;
调用与所述客户端对应的安卓系统内的构造方法,并向所述构造方法的参数内写入所述指定TLS协议数组,以生成指定构造方法;
通过所述指定构造方法生成包含所述指定TLS协议数组的所述第一网络对象以及包含所述指定TLS协议数组的所述第二网络对象。
可选地,所述根据所述版本信息,从预设的协议数据库中选取与所述版本信息对应的指定TLS协议数组的步骤之前,包括:
对于不同版本信息的安卓系统,生成对应的各TLS协议数组;
将各所述版本信息与各所述TLS协议数组一一对应的存储于所述协议数据库。
可选地,所述通过所述第一网络对象及所述第二网络对象,向所述服务端发送第一网络请求的步骤,包括:
获取所述客户端当前的页面对应的页面信息,其中所述页面信息包括原生界面或H5界面;
若所述客户端当前的页面对应的页面信息为原生界面,调用所述第一网络对象及所述第二网络对象向所述服务端发送所述第一网络请求。
可选地,所述获取所述客户端当前的页面对应的页面信息的步骤之后,包括:
若所述客户端当前的页面对应的页面信息为H5界面,通过拦截请求方法对由所述客户端对应的安卓系统内的webview发出的第二网络请求的请求动作进行拦截,以得到所述第二网络请求的特定url地址以及特定网络请求参数;
拦截成功后,调用所述第一网络对象及所述第二网络对象向所述服务端发送包含所述特定url地址以及所述特定网络请求参数的所述第一网络请求。
可选地,所述通过拦截请求方法对由所述客户端对应的安卓系统内的webview发出的第二网络请求的请求动作进行拦截的步骤之前,包括:
获取与所述客户端对应的安卓系统内的所述webview的指定拦截方法;
对所述指定拦截方法进行重写,以生成包含url地址以及网络请求参数的所述拦截请求方法。
可选地,所述调用所述第一网络对象及所述第二网络对象向所述服务端发送包含所述特定url地址以及所述特定网络请求参数的所述第一网络请求的步骤之后,包括:
接收所述服务端返回的对于所述第一网络请求的响应数据流;
将所述响应数据流包装生成与所述webview对应的响应数据对象;
将所述响应数据对象返回至所述webview,以便所述webview对所述响应数据对象进行自动解析后生成与所述第一网络请求相对应的第一网络响应数据。
本申请还提供一种发送网络请求的装置,用于安装有低版本的安卓系统的客户端向支持高版本的TLS协议的服务端发送网络请求,包括:
构建模块,用于构建指定网络请求对象;
生成模块,用于按照第一预设规则控制所述指定网络请求对象生成第一网络对象及第二网络对象,其中所述第一网络对象及所述第二网络对象均携带有所述服务端当前支持的所述高版本的TLS协议;
替换模块,用于将所述客户端对应的安卓系统默认使用的网络请求对象替换为所述指定网络请求对象;
发送模块,用于通过所述第一网络对象及所述第二网络对象,向所述服务端发送第一网络请求。
本申请还提供一种计算机设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器执行所述计算机程序时实现上述任一项所述方法的步骤。
本申请还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一项所述方法的步骤。
本申请中提供的发送网络请求的方法、装置、计算机设备和存储介质,具有以下有益效果:
本申请中提供的发送网络请求的方法、装置、计算机设备和存储介质,客户端构建指定网络请求对象;按照第一预设规则控制所述指定网络请求对象生成第一网络对象及第二网络对象,其中所述第一网络对象及所述第二网络对象均携带有所述服务端当前支持的所述高版本的TLS协议;将所述客户端对应的安卓系统默认使用的网络请求对象替换为所述指定网络请求对象;通过所述第一网络对象及所述第二网络对象,向服务端发送第一网络请求。通过本申请,使得安装有低版本的安卓系统的客户端在请求支持高版本的TLS协议的服务端的https接口时,能够正常访问https接口,并接收到服务端响应的网络数据,有效地避免了因为服务端安全升级而导致的低版本安卓用户的流失问题。
附图说明
图1是本申请一实施例的发送网络请求的方法的流程示意图;
图2是本申请另一实施例的发送网络请求的方法的流程示意图;
图3是本申请又一实施例的发送网络请求的方法的流程示意图;
图4是本申请一实施例的发送网络请求的装置的结构示意图;
图5是本申请一实施例的计算机设备的结构示意图。
本申请目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用于解释本申请,并不用于限定本申请。
需要说明,本申请实施例中所有方向性指示(诸如上、下、左、右、前、后……)仅用于解释在某一特定姿态(如附图所示)下各部件之间的相对位置关系、运动情况等,如果该特定姿态发生改变时,则该方向性指示也相应地随之改变,所述的连接可以是直接连接,也可以是间接连接。
参照图1,本申请一实施例的发送网络请求的方法,用于安装有低版本的安卓系统的客户端向支持高版本的TLS协议的服务端发送网络请求,包括:
S1:客户端构建指定网络请求对象;
S2:按照第一预设规则控制所述指定网络请求对象生成第一网络对象及第二网络对象,其中所述第一网络对象及所述第二网络对象均携带有所述服务端当前支持的所述高版本的TLS协议;
S3:将所述客户端对应的安卓系统默认使用的网络请求对象替换为所述指定网络请求对象;
S4:通过所述第一网络对象及所述第二网络对象,向所述服务端发送第一网络请求。
如上述步骤S1至S4所述,某些低版本的安卓系统,例如android 4.x系统,即android4.0-android 4.4系统默认只支持低版本的TLS(Transport Layer Security,安全传输层)协议,例如1.0版本的TLS协议,其中1.0版本的TLS协议可写成TLSv1.0协议的形式。当服务端因为安全考虑进行了升级后,变成只支持新版本或较高版本的TLS协议时,此时低版本的安卓系统对应的客户端在向服务端请求https(hypertext transport protocolserver,超文本传送协议服务器)接口时就会失败,导致在发出网络请求后不能正常访问到网络数据。上述低版本的安卓系统对应的客户端在请求服务端的https接口的过程为:首先调用出安卓系统默认使用的网络请求对象,再通过该网络请求对象生成的两个指定网络对象来向服务端发出网络请求,其中,上述的两个指定网络对象是使用客户端对应的安卓系统内自带的低版本的TLS协议来生成的,即上述的两个指定网络对象内携带有低版本的TLS协议,上述网络请求对象为SSLSocketFactory对象,上述低版本的TLS协议为TLSv1.0协议。本实施例适用于安装有低版本的安卓系统的客户端向支持高版本的TLS协议的服务端发送网络请求的应用场景,在本实施例,客户端会预先构建一个指定网络请求对象,例如可命名为PaemSSLSocketFactory对象,并按照第一预设规则控制该指定网络请求对象生成对应的第一网络对象和第二网络对象,且第一网络对象及所述第二网络对象均携带有所述服务端当前支持的上述高版本的TLS协议,其中,上述的客户端为安装有低版本的安卓系统的客户端,上述低版本的安卓系统可为android 4.0-android 4.4系统,上述第一网络对象为SSLSocket(Security Socket Layer Socket,安全套接字)对象,上述第二网络对象为SSLContext
(Security Socket Layer Context,上下文,用于表示安全套接字协议的实现)对象,上述的SSLSocket对象和SSLContext对象都是基于新版本或较高版本的指定TLS协议生成的,该指定TLS协议可包括TLSv1.1和TLSv1.2协议中的一种或多种TLS协议。之后将客户端对应的安卓系统内所有默认使用的上述网络请求对象替换成新构建的指定网络请求对象,并通过生成的第一网络对象和第二网络对象向服务端发送第一网络请求。通过本实施例,能实现安装有低版本的安卓系统的客户端能够支持新版本或较高版本的TLS协议,使得安装有低版本的安卓系统的客户端在向支持高版本的TLS协议的发送第一网络请求,能够正常访问该服务端的https接口,并能接收到服务端响应的对应于第一网络请求的网络数据。
参照图2,进一步地,本申请一实施例中,上述步骤S2,包括:
S200:获取与所述客户端对应的所述安卓系统的版本信息;
S201:根据所述版本信息,从预设的协议数据库中选取与所述版本信息对应的指定TLS协议数组;
S202:调用与所述客户端对应的安卓系统内的构造方法,并向所述构造方法的参数内写入所述指定TLS协议数组,以生成指定构造方法;
S203:通过所述指定构造方法生成包含所述指定TLS协议数组的所述第一网络对象以及包含所述指定TLS协议数组的所述第二网络对象。
如上述步骤S200至S203所述,在当前各种安卓系统的使用过程中,对于不同版本的TLS协议,在不同版本的安卓系统中会出现需要被启用和启用时不被支持的问题。通过获取与当前客户端对应的安卓系统的版本信息,并可从预先设置的协议数据库中查找出与当前客户端的安卓系统版本对应的指定TLS协议数组,其中上述指定TLS协议数组内包含有多个TLS协议,例如android4.1系统对应的指定TLS协议数组内包含有TLSv1.0、TLSv1.1和TLSv1.2协议,且上述预设的协议数据库内一一对应存储有不同版本的安卓系统及各种TLS协议数组。之后通过显式指定方式,基于上述指定TLS协议数组来控制所述指定网络请求对象生成上述第一网络对象及第二网络对象,其中,显式指定方式是指在调用构造方法生成第一网络对象及第二网络对象时,在该构造方法参数内写入该指定TLS协议数组内所有的TLS协议,来使得客户端内的安卓系统不会使用默认的低版本TLS协议,而是使用上述指定TLS协议数组内的TLS协议,即强制生成包含有该指定TLS协议数组内的TLS协议的第一网络对象和第二网络对象,并通过上述第一网络对象和第二网络对象来向服务端发出网络请求。进一步地,也可以从包含有多个TLS协议的指定TLS协议数组内挑选出指定数量的指定TLS协议,并基于该指定TLS协议来生成该第一网络对象和第二网络对象,上述指定TLS协议的数量包括一个或多个,可为服务端在经过升级后所支持的新版本或较高版本的TLS协议,或者为已经被当前客户端的对应的安卓系统被支持的TLS协议,或者为由用户自行设置或选择的TLS协议。之后,通过上述第一网络对象及第二网络对象来请求服务端的https接口,来发出第一网络请求。其中,上述第一网络对象为SSLSocket,第二网络对象为SSLContext。在调用服务端接口来进行网络请求时,采用的是https协议,但在实际的网络请求中在底层的传输层过程中是使用tcp(Transmission Control Protocol,传输控制协议)协议进行传输的,在本实施例,是通过包含有上述指定TLS协议数组的SSLSocket对象来进行与服务端真正的数据交互的,具体地,通过调用上述SSLSocket对象,来请求一个tcp流套接字,并在与服务端的套接字连接成功建立之后,再根据https协议来进行与服务端的数据交互。另外,https协议是一个加密的应用层协议,在https协议的实际运行过程中,还需要使用到上述SSLContext对象,该SSLContext对象也包含有上述指定TLS协议数组,另外还包含有其它的关键性数据,例如数据加密使用的key(密钥),以及一些安全检验证书相关的数据信息,通过该SSLContext对象能有效地保证客户端与服务端之间数据交互的加密可靠性。本实施例中,通过生成包含上述指定TLS协议数组的SSLSocket对象与SSLContext对象,当安装有低版本的安卓系统的客户端在向服务端发出网络请求时,便会自动使用上述SSLSocket对象与上述SSLContext对象来请求服务端的https接口,且由于SSLSocket对象与SSLContext对象使用的是与当前客户端对应的安卓系统的版本信息所对应的指定TLS协议数组,即该指定TLS协议数组内包含有当前客户端对应的安卓系统已经被支持的所有TLS协议,以使得安装有低版本的安卓系统的客户端在请求服务端的https接口时,能够正常访问网络数据,并成功获取到服务端响应的网络数据。
进一步地,本申请一实施例中,上述步骤S201之前,包括:
S2010:对于不同版本信息的安卓系统,生成对应的各TLS协议数组;
S2011:将各所述版本信息与各所述TLS协议数组一一对应的存储于所述协议数据库。
如上述步骤S2010和S2011所述,对于不同版本的安卓系统,目前最常用到的几种TLS协议是SSLv3、TLSv1、TLSv1.1和TLSv1.2协议,根据这些协议在不同版本的安卓系统中被支持的情况和被启用的情况,可以实现在不同的安卓系统中强制启用已经被支持的所有TLS协议。在本实施例,对于不同版本信息的安卓系统,可以分别生成通用于不同版本信息的安卓系统的对应的TLS协议数组,其中该TLS协议数组里包含有多个TLS协议,之后将安卓系统的各种版本信息与各种TLS协议数组一一对应的存储于一个预设的协议数据库中。然后控制上述指定网络请求对象生成包括上述TLS协议数组的第一网络对象及包含上述TLS协议数组的第二网络对象,从而实现在不同版本的安卓系统中强制启用已经被支持的所有TLS协议。举例地,对于android4.0-android4.4系统,可对应生成一个包含TLSv1.0、TLSv1.1和TLSv1.2协议的第一TLS协议数组,并将android4.0-android4.4系统的版本信息与第一TLS协议数组对应的存储在预设的协议数据库中,在生成了包含第一TLS协议数据的第一网络对象和第二网络对象后便可以实现android4.0-android4.4系统强制启用第一TLS协议数组内所有的SSLv3、TLSv1.0、TLSv1.1和TLSv1.2协议;或者对于android4.0以下的系统,例如android2.0-android2.3系统,可对应生成一个包含SSLv3、TLSv1.0、TLSv1.1和TLSv1.2协议的第二TLS协议数组,并将android4.0以下系统的版本信息与第二TLS协议数组对应的存储在预设的协议数据库中,在生成了包含第二TLS协议数据的第一网络对象和第二网络对象后,便可以实现对于android4.0以下系统强制启用第二TLS协议数组内所有的SSLv3、TLSv1.0、TLSv1.1和TLSv1.2协议。
参照图3,进一步地,本申请一实施例中,上述步骤S4,包括:
S400:获取所述客户端当前的页面对应的页面信息,其中所述页面信息包括原生界面或H5界面;
S401:若所述客户端当前的页面对应的页面信息为原生界面,调用所述第一网络对象及所述第二网络对象向所述服务端发送所述第一网络请求。
如上述步骤S400和S401所述,目前的APP(Application,应用程序)客户端的开发模式有三种,分别为原生开发,H5开发和Hybrid开发,上述H5指HTML5,上述Hybrid开发指混合开发。由于上述客户端为上述三种开发模式中的任意一种,则上述的第一网络请求可由客户端当前的原生界面发出的,或者由客户端当前的H5界面发出的。在本实施例,通过获取客户端当前的页面对应的页面信息,可以判断出当前页面为原生界面或者H5界面,其中可通过获取客户端当前的页面对应的代码性质来进行判断,如果该代码为原生代码,则该页面对应为原生界面,而如果该代码为HTML代码,则该页面对应为H5界面;或者可断开客户端的网络连接,然后执行点开该页面的动作,如果该页面可以正常显示则表示该页面为原生界面,而如果该页面显示404或错误页面则表示该页面为H5页面。进一步地,假设客户端当前的页面为H5界面,由于在安装有低版本的安卓系统的客户端上,H5界面发出网络请求的方式与原生界面发出的网络请求的方式存在差异,原生界面可以直接调用生成的携带有服务端当前支持的高版本的TLS协议的第一网络对象及第二网络对象来发出第一网络请求,但H5界面是需要通过webview(网络视图,能加载显示网页,可以将其视为一个浏览器)来发送第一网络请求的,H5界面首先会将第一网络请求发送到客户端对应的安卓系统内的webview(上,由于webview默认是通过直接调用客户端对应的安卓系统内部的系统框架代码来执行第一网络请求的发送,并且客户端没有修改安卓系统内部的系统框架代码的权限,系统框架代码所采用的是低版本的TLS协议,因此在服务端因为安全考虑进行了升级后,只支持新版本或较高版本的TLS协议时,那么会出现在H5界面发出网络请求后,返回的是空白界面的非正常显示,并且没有正常的数据加载的情况。在本实施例,假设客户端当前的页面不为H5界面,则可判定客户端当前的页面为原生界面,即不会出现上述的返回的是空白界面的非正常显示,并且没有正常的数据加载的情形。因此在构建出指定网络请求对象并按照第一预设规则控制该指定网络请求对象生成第一网络对象及第二网络对象后,通过将客户端内的安卓系统默认使用的网络请求对象替换为该指定网络请求对象,就可以直接调用该第一网络对象及第二网络对象来向支持高版本TLS协议的服务端发送第一网络请求,之后也能成功接收到服务端返回的对于第一网络请求的网络响应数据。
进一步地,本申请一实施例中,上述步骤S400之后,包括:
S402:若所述客户端当前的页面对应的页面信息为H5界面,通过拦截请求方法对由所述客户端对应的安卓系统内的webview发出的第二网络请求的请求动作进行拦截,以得到所述第二网络请求的特定url地址以及特定网络请求参数;
S403:拦截成功后,调用所述第一网络对象及所述第二网络对象向所述服务端发送包含所述特定url地址以及所述特定网络请求参数的所述第一网络请求。
如上述步骤S402和S403所述,如果所述客户端当前的页面对应的页面信息为H5界面,为了实现H5界面在低版本安卓系统上的客户端能正常显示并且有正常的数据加载,客户端在检测到H5界面通过客户端对应的安卓系统内的webview执行发送第二网络请求的请求动作后,会通过拦截请求方法对该请求动作进行拦截,即拦截webview调用安卓系统内部的系统框架代码的动作,从而使得H5界面能够调用生成的携带有服务端支持的高版本的TLS协议的第一网络对象及第二网络对象来发出网络请求,进而成功获得服务端返回的响应数据。另外,在拦截请求方法拦截成功之后,会提取出第二网络请求中的特定url(Uniform Resource Locator,统一资源定位符)地址以及特定网络请求参数,并将特定url地址以及特定网络请求参数写入该第一网络请求后发出,其中url地址包含文件所在的服务器的名称或IP(Internet Protocol,网络之间互连的协议)地址。由于该第一网络对象及第二网络对象已经支持新版本或较高版本的TLS协议,且第一网络请求内包含有上述特定url地址以及特定网络请求参数,因此通过对H5界面通过客户端对应的安卓系统内的webview执行发送第二网络请求的请求动作进行拦截,从而使得H5界面能调用上述第一网络对象及第二网络对象来发出第一网络请求,进而H5界面能成功获取到服务端对于该第一网络请求的响应数据,有效地实现了H5界面与服务端的正常数据交互,保证了H5界面在安装有低版本安卓系统的客户端上能正常加载服务端返回的响应数据。
进一步地,本申请一实施例中,上述步骤S402,包括:
S4020:获取与所述客户端对应的安卓系统内的所述webview的指定拦截方法;
S4021:对所述指定拦截方法进行重写,以生成包含url地址以及网络请求参数的所述拦截请求方法。
如上述步骤S4020和S4021所述,在对由客户端对应的安卓系统内的webview发出的第二网络请求的请求动作进行拦截之前,需要构建出用于拦截的拦截请求方法,构建的具体过程可为:首先查找出客户端对应的安卓系统内的webview的指定拦截方法,即webview内的webviewClient类中的interceptRequest方法,在获取到该interceptRequest方法后,进一步对该interceptRequest方法进行重写,来生成重写后的interceptRequest方法,即上述的拦截请求方法,其中,webviewClient类是帮助webview处理各种通知和请求事件的,重写后的interceptRequest方法里包括url地址以及网络请求参数。当检测到H5界面通过客户端对应的安卓系统内的webview执行发送第二网络请求的请求动作时,上述拦截请求方法会自动被调用,来实现对该请求动作的拦截,并在拦截成功后能获取到第二网络请求的特定url地址和特定网络请求参数。之后,根据所获取的特定url地址以及特定网络请求参数,再调用携带有服务端支持的高版本的TLS协议的第一网络对象及第二网络对象,来发出包含上述特定url地址和上述特定网络请求参数的第一网络请求来完成对服务端的网络访问。由于上述用于生成第一网络请求的第一网络对象及第二网络对象已经携带有服务端当前支持的高版本的TLS协议,因此通过调用第一网络对象及第二网络对象来生成第一网络请求,并将该第一网络请求发送至服务端后,H5界面便能成功获取到服务端对于该第一网络请求的响应数据,从而有效地实现了H5界面与服务端的正常数据交互。
进一步地,本申请一实施例中,上述步骤S403之后,包括:
S4030:接收所述服务端返回的对于所述第一网络请求的响应数据流;
S4031:将所述响应数据流包装生成与所述webview对应的响应数据对象;
S4032:将所述响应数据对象返回至所述webview,以便所述webview对所述响应数据对象进行自动解析后生成与所述第一网络请求相对应的第一网络响应数据。
如上述步骤S4030至S4032所述,当服务端成功接收到由客户端通过调用第一网络对象及第二网络对象发送的包含上述特定url地址以及上述特定网络请求参数的第一网络请求后,会向客户端返回与该第一网络请求相对应的响应数据流。客户端在接收到该响应数据流后,首先会将该响应数据流包装生成一个webresourcerespone对象,并将上述webresourcerespone对象传输给客户端的安卓系统内的webview,以使得该webview在接收到该webresourcerespone对象后,会进行对该webresourcerespone对象的自动解析,以获得对应于该第一网络请求的第一网络响应数据,之后H5界面便能正常地显示出该第一网络响应数据。通过对H5界面发出的第二网络请求进行拦截,即对H5界面通过客户端对应的安卓系统内的webview执行发送第二网络请求的请求动作进行拦截,使得在拦截成功后H5界面会从默认通过webview来直接调用安卓系统内部的系统框架代码来发送网络请求的方式,转换到调用携带有服务端支持的高版本的TLS协议的第一网络对象及第二网络对象来发出网络请求的方式来发出上述第一网络请求。并在服务端返回与第一网络请求对应的响应数据流后,客户端会将响应数据流包装生成与webview对应的响应数据对象并返回至webview,从而使得webview对该响应数据对象进行自动解析来生成适用于H5界面的第一网络响应数据,从而有效地解决了H5界面发出的网络请求得不到响应的问题,使得安装有低版本的安卓系统的客户端可以正常使用H5界面来完成与服务端的数据交互,且H5界面在低版本的安卓系统上也能正常加载服务端返回的响应数据,避免了因为服务端安全升级而导致的低版本安卓用户的流失问题。
参照图4,本申请一实施例中还提供了一种发送网络请求的装置,用于安装有低版本的安卓系统的客户端向支持高版本的TLS协议的服务端发送网络请求,包括:
构建模块1,用于构建指定网络请求对象;
生成模块2,用于按照第一预设规则控制所述指定网络请求对象生成第一网络对象及第二网络对象,其中所述第一网络对象及所述第二网络对象均携带有所述服务端当前支持的所述高版本的TLS协议;
替换模块3,用于将所述客户端对应的安卓系统默认使用的网络请求对象替换为所述指定网络请求对象;
发送模块4,用于通过所述第一网络对象及所述第二网络对象,向服务端发送第一网络请求。
本实施例中,某些低版本的安卓系统,例如android 4.x系统,即android 4.0-android 4.4系统默认只支持低版本的TLS(Transport Layer Security,安全传输层)协议,例如1.0版本的TLS协议,其中1.0版本的TLS协议可写成TLSv1.0协议的形式。当服务端因为安全考虑进行了升级后,变成只支持新版本或较高版本的TLS协议时,此时低版本的安卓系统对应的客户端在向服务端请求https(hypertext transport protocol server,超文本传送协议服务器)接口时就会失败,导致在发出网络请求后不能正常访问到网络数据。上述低版本的安卓系统对应的客户端在请求服务端的https接口的过程为:首先调用出安卓系统默认使用的网络请求对象,再通过该网络请求对象生成的两个指定网络对象来向服务端发出网络请求,其中,上述的两个指定网络对象是使用客户端对应的安卓系统内自带的低版本的TLS协议来生成的,即上述的两个指定网络对象内携带有低版本的TLS协议,上述网络请求对象为SSLSocketFactory对象,上述低版本的TLS协议为TLSv1.0协议。本实施例适用于安装有低版本的安卓系统的客户端向支持高版本的TLS协议的服务端发送网络请求的应用场景,在本实施例,客户端会预先构建一个指定网络请求对象,例如可命名为PaemSSLSocketFactory对象,并按照第一预设规则控制该指定网络请求对象生成对应的第一网络对象和第二网络对象,且第一网络对象及所述第二网络对象均携带有所述服务端当前支持的上述高版本的TLS协议,其中,上述的客户端为安装有低版本的安卓系统的客户端,上述低版本的安卓系统可为android 4.0-android 4.4系统,上述第一网络对象为SSLSocket(Security Socket Layer Socket,安全套接字)对象,上述第二网络对象为SSLContext(Security Socket Layer Context,上下文,用于表示安全套接字协议的实现)对象,上述的SSLSocket对象和SSLContext对象都是基于新版本或较高版本的指定TLS协议生成的,该指定TLS协议可包括TLSv1.1和TLSv1.2协议中的一种或多种TLS协议。之后将客户端对应的安卓系统内所有默认使用的上述网络请求对象替换成新构建的指定网络请求对象,并通过生成的第一网络对象和第二网络对象向服务端发送第一网络请求。通过本实施例,能实现安装有低版本的安卓系统的客户端能够支持新版本或较高版本的TLS协议,使得安装有低版本的安卓系统的客户端在向支持高版本的TLS协议的服务端发送第一网络请求,能够正常访问该服务端的https接口,并能接收到服务端响应的对应于第一网络请求的网络数据。
进一步地,本申请一实施例中,上述生成模块,包括:
第一获取单元,用于获取与所述客户端对应的所述安卓系统的版本信息;
选取单元,用于根据所述版本信息,从预设的协议数据库中选取与所述版本信息对应的指定TLS协议数组;
第一调用单元,用于调用与所述客户端对应的安卓系统内的构造方法,并向所述构造方法的参数内写入所述指定TLS协议数组,以生成指定构造方法;
第一生成单元,用于通过所述指定构造方法生成包含所述指定TLS协议数组的所述第一网络对象以及包含所述指定TLS协议数组的所述第二网络对象。
本实施例中,在当前各种安卓系统的使用过程中,对于不同版本的TLS协议,在不同版本的安卓系统中会出现需要被启用和启用时不被支持的问题。通过获取与当前客户端对应的安卓系统的版本信息,并可从预先设置的协议数据库中查找出与当前客户端的安卓系统版本对应的指定TLS协议数组,其中上述指定TLS协议数组内包含有多个TLS协议,例如android4.1系统对应的指定TLS协议数组内包含有TLSv1.0、TLSv1.1和TLSv1.2协议,且上述预设的协议数据库内一一对应存储有不同版本的安卓系统及各种TLS协议数组。之后通过显式指定方式,基于上述指定TLS协议数组来控制所述指定网络请求对象生成上述第一网络对象及第二网络对象,其中,显式指定方式是指在调用构造方法生成第一网络对象及第二网络对象时,在该构造方法参数内写入该指定TLS协议数组内所有的TLS协议,来使得客户端内的安卓系统不会使用默认的低版本TLS协议,而是使用上述指定TLS协议数组内的TLS协议,即强制生成包含有该指定TLS协议数组内的TLS协议的第一网络对象和第二网络对象,并通过上述第一网络对象和第二网络对象来向服务端发出网络请求。进一步地,也可以从包含有多个TLS协议的指定TLS协议数组内挑选出指定数量的指定TLS协议,并基于该指定TLS协议来生成该第一网络对象和第二网络对象,上述指定TLS协议的数量包括一个或多个,可为服务端在经过升级后所支持的新版本或较高版本的TLS协议,或者为已经被当前客户端的对应的安卓系统被支持的TLS协议,或者为由用户自行设置或选择的TLS协议。之后,通过上述第一网络对象及第二网络对象来请求服务端的https接口,来发出第一网络请求。其中,上述第一网络对象为SSLSocket,第二网络对象为SSLContext。在调用服务端接口来进行网络请求时,采用的是https协议,但在实际的网络请求中在底层的传输层过程中是使用tcp(Transmission Control Protocol,传输控制协议)协议进行传输的,在本实施例,是通过包含有上述指定TLS协议数组的SSLSocket对象来进行与服务端真正的数据交互的,具体地,通过调用上述SSLSocket对象,来请求一个tcp流套接字,并在与服务端的套接字连接成功建立之后,再根据https协议来进行与服务端的数据交互。另外,https协议是一个加密的应用层协议,在https协议的实际运行过程中,还需要使用到上述SSLContext对象,该SSLContext对象也包含有上述指定TLS协议数组,另外还包含有其它的关键性数据,例如数据加密使用的key(密钥),以及一些安全检验证书相关的数据信息,通过该SSLContext对象能有效地保证客户端与服务端之间数据交互的加密可靠性。本实施例中,通过生成包含上述指定TLS协议数组的SSLSocket对象与SSLContext对象,当安装有低版本的安卓系统的客户端在向服务端发出网络请求时,便会自动使用上述SSLSocket对象与上述SSLContext对象来请求服务端的https接口,且由于SSLSocket对象与SSLContext对象使用的是与当前客户端对应的安卓系统的版本信息所对应的指定TLS协议数组,即该指定TLS协议数组内包含有当前客户端对应的安卓系统已经被支持的所有TLS协议,以使得安装有低版本的安卓系统的客户端在请求服务端的https接口时,能够正常访问网络数据,并成功获取到服务端响应的网络数据。
进一步地,本申请一实施例中,上述生成模块,还包括:
第二生成单元,用于对于不同版本信息的安卓系统,生成对应的各TLS协议数组;
存储单元,用于将各所述版本信息与各所述TLS协议数组一一对应的存储于所述协议数据库。
本实施例中,对于不同版本的安卓系统,目前最常用到的几种TLS协议是SSLv3、TLSv1、TLSv1.1和TLSv1.2协议,根据这些协议在不同版本的安卓系统中被支持的情况和被启用的情况,可以实现在不同的安卓系统中强制启用已经被支持的所有TLS协议。在本实施例,对于不同版本信息的安卓系统,可以分别生成通用于不同版本信息的安卓系统的对应的TLS协议数组,其中该TLS协议数组里包含有多个TLS协议,之后将安卓系统的各种版本信息与各种TLS协议数组一一对应的存储于一个预设的协议数据库中。然后控制上述指定网络请求对象生成包括上述TLS协议数组的第一网络对象及包含上述TLS协议数组的第二网络对象,从而实现在不同版本的安卓系统中强制启用已经被支持的所有TLS协议。
举例地,对于android4.0-android4.4系统,可对应生成一个包含TLSv1.0、TLSv1.1和TLSv1.2协议的第一TLS协议数组,并将android4.0-android4.4系统的版本信息与第一TLS协议数组对应的存储在预设的协议数据库中,在生成了包含第一TLS协议数据的第一网络对象和第二网络对象后便可以实现android4.0-android4.4系统强制启用第一TLS协议数组内所有的SSLv3、TLSv1.0、TLSv1.1和TLSv1.2协议;或者对于android4.0以下的系统,例如android2.0-android2.3系统,可对应生成一个包含SSLv3、TLSv1.0、TLSv1.1和TLSv1.2协议的第二TLS协议数组,并将android4.0以下系统的版本信息与第二TLS协议数组对应的存储在预设的协议数据库中,在生成了包含第二TLS协议数据的第一网络对象和第二网络对象后,便可以实现对于android4.0以下系统强制启用第二TLS协议数组内所有的SSLv3、TLSv1.0、TLSv1.1和TLSv1.2协议。
进一步地,本申请一实施例中,上述发送模块,包括:
第二获取单元,用于获取所述客户端当前的页面对应的页面信息,其中所述页面信息包括原生界面或H5界面;
第二调用单元,用于若所述客户端当前的页面对应的页面信息为原生界面,调用所述第一网络对象及所述第二网络对象向所述服务端发送所述第一网络请求。
本实施例中,目前的APP(Application,应用程序)客户端的开发模式有三种,分别为原生开发,H5开发和Hybrid开发,上述H5指HTML5,上述Hybrid开发指混合开发。由于上述客户端为上述三种开发模式中的任意一种,则上述的第一网络请求可由客户端当前的原生界面发出的,或者由客户端当前的H5界面发出的。在本实施例,通过获取客户端当前的页面对应的页面信息,可以判断出当前页面为原生界面或者H5界面,其中可通过获取客户端当前的页面对应的代码性质来进行判断,如果该代码为原生代码,则该页面对应为原生界面,而如果该代码为HTML代码,则该页面对应为H5界面;或者可断开客户端的网络连接,然后执行点开该页面的动作,如果该页面可以正常显示则表示该页面为原生界面,而如果该页面显示404或错误页面则表示该页面为H5页面。进一步地,假设客户端当前的页面为H5界面,由于在安装有低版本的安卓系统的客户端上,H5界面发出网络请求的方式与原生界面发出的网络请求的方式存在差异,原生界面可以直接调用生成的携带有服务端当前支持的高版本的TLS协议的第一网络对象及第二网络对象来发出第一网络请求,但H5界面是需要通过webview(网络视图,能加载显示网页,可以将其视为一个浏览器)来发送第一网络请求的,H5界面首先会将第一网络请求发送到客户端对应的安卓系统内的webview(上,由于webview默认是通过直接调用客户端对应的安卓系统内部的系统框架代码来执行第一网络请求的发送,并且客户端没有修改安卓系统内部的系统框架代码的权限,系统框架代码所采用的是低版本的TLS协议,因此在服务端因为安全考虑进行了升级后,只支持新版本或较高版本的TLS协议时,那么会出现在H5界面发出网络请求后,返回的是空白界面的非正常显示,并且没有正常的数据加载的情况。在本实施例,假设客户端当前的页面不为H5界面,则可判定客户端当前的页面为原生界面,即不会出现上述的返回的是空白界面的非正常显示,并且没有正常的数据加载的情形。因此在构建出指定网络请求对象并按照第一预设规则控制该指定网络请求对象生成第一网络对象及第二网络对象后,通过将客户端内的安卓系统默认使用的网络请求对象替换为该指定网络请求对象,就可以直接调用该第一网络对象及第二网络对象来向支持高版本TLS协议的服务端发送第一网络请求,之后也能成功接收到服务端返回的对于第一网络请求的网络响应数据。
进一步地,本申请一实施例中,上述发送模块,还包括:
拦截单元,用于若所述客户端当前的页面对应的页面信息为H5界面,通过拦截请求方法对由所述客户端对应的安卓系统内的webview发出的第二网络请求的请求动作进行拦截,以得到所述第二网络请求的特定url地址以及特定网络请求参数;
第三调用单元,用于拦截成功后,调用所述第一网络对象及所述第二网络对象向所述服务端发送包含所述特定url地址以及所述特定网络请求参数的所述第一网络请求。
本实施例中,如果所述客户端当前的页面对应的页面信息为H5界面,为了实现H5界面在低版本安卓系统上的客户端能正常显示并且有正常的数据加载,客户端在检测到H5界面通过客户端对应的安卓系统内的webview执行发送第二网络请求的请求动作后,会通过拦截请求方法对该请求动作进行拦截,即拦截webview调用安卓系统内部的系统框架代码的动作,从而使得H5界面能够调用生成的携带有服务端支持的高版本的TLS协议的第一网络对象及第二网络对象来发出网络请求,进而成功获得服务端返回的响应数据。另外,在拦截请求方法拦截成功之后,会提取出第二网络请求中的特定url(Uniform ResourceLocator,统一资源定位符)地址以及特定网络请求参数,并将特定url地址以及特定网络请求参数写入该第一网络请求后发出,其中url地址包含文件所在的服务端的名称或IP(Internet Protocol,网络之间互连的协议)地址。由于该第一网络对象及第二网络对象已经支持新版本或较高版本的TLS协议,且第一网络请求内包含有上述特定url地址以及特定网络请求参数,因此通过对H5界面通过客户端对应的安卓系统内的webview执行发送第二网络请求的请求动作进行拦截,从而使得H5界面能调用上述第一网络对象及第二网络对象来发出第一网络请求,进而H5界面能成功获取到服务端对于该第一网络请求的响应数据,有效地实现了H5界面与服务端的正常数据交互,保证了H5界面在安装有低版本安卓系统的客户端上能正常加载服务端返回的响应数据。
进一步地,本申请一实施例中,上述发送模块,包括:
第三获取单元,用于获取与所述客户端对应的安卓系统内的所述webview的指定拦截方法;
第三生成单元,用于对所述指定拦截方法进行重写,以生成包含url地址以及网络请求参数的所述拦截请求方法。
本实施例中,在对由客户端对应的安卓系统内的webview发出的第二网络请求的请求动作进行拦截之前,需要构建出用于拦截的拦截请求方法,构建的具体过程可为:首先查找出客户端对应的安卓系统内的webview的指定拦截方法,即webview内的webviewClient类中的interceptRequest方法,在获取到该interceptRequest方法后,进一步对该interceptRequest方法进行重写,来生成重写后的interceptRequest方法,即上述的拦截请求方法,其中,webviewClient类是帮助webview处理各种通知和请求事件的,重写后的interceptRequest方法里包括url地址以及网络请求参数。当检测到H5界面通过客户端对应的安卓系统内的webview执行发送第二网络请求的请求动作时,上述拦截请求方法会自动被调用,来实现对该请求动作的拦截,并在拦截成功后能获取到第二网络请求的特定url地址和特定网络请求参数。之后,根据所获取的特定url地址以及特定网络请求参数,再调用携带有服务端支持的高版本的TLS协议的第一网络对象及第二网络对象,来发出包含上述特定url地址和上述特定网络请求参数的第一网络请求来完成对服务端的网络访问。由于上述用于生成第一网络请求的第一网络对象及第二网络对象已经携带有服务端当前支持的高版本的TLS协议,因此通过调用第一网络对象及第二网络对象来生成第一网络请求,并将该第一网络请求发送至服务端后,H5界面便能成功获取到服务端对于该第一网络请求的响应数据,从而有效地实现了H5界面与服务端的正常数据交互。
进一步地,本申请一实施例中,上述发送模块,还包括:
接收单元,用于接收所述服务端返回的对于所述第一网络请求的响应数据流;
第四生成单元,用于将所述响应数据流包装生成与所述webview对应的响应数据对象;
返回单元,用于将所述响应数据对象返回至所述webview,以便所述webview对所述响应数据对象进行自动解析后生成与所述第一网络请求相对应的第一网络响应数据。
本实施例中,当服务端成功接收到由客户端通过调用第一网络对象及第二网络对象发送的包含上述特定url地址以及上述特定网络请求参数的第一网络请求后,会向客户端返回与该第一网络请求相对应的响应数据流。客户端在接收到该响应数据流后,首先会将该响应数据流包装生成一个webresourcerespone对象,并将上述webresourcerespone对象传输给客户端的安卓系统内的webview,以使得该webview在接收到该webresourcerespone对象后,会进行对该webresourcerespone对象的自动解析,以获得对应于该第一网络请求的第一网络响应数据,之后H5界面便能正常地显示出该第一网络响应数据。通过对H5界面发出的第二网络请求进行拦截,即对H5界面通过客户端对应的安卓系统内的webview执行发送第二网络请求的请求动作进行拦截,使得在拦截成功后H5界面会从默认通过webview来直接调用安卓系统内部的系统框架代码来发送网络请求的方式,转换到调用携带有服务端支持的高版本的TLS协议的第一网络对象及第二网络对象来发出网络请求的方式来发出上述第一网络请求。并在服务端返回与第一网络请求对应的响应数据流后,客户端会将响应数据流包装生成与webview对应的响应数据对象并返回至webview,从而使得webview对该响应数据对象进行自动解析来生成适用于H5界面的第一网络响应数据,从而有效地解决了H5界面发出的网络请求得不到响应的问题,使得安装有低版本的安卓系统的客户端可以正常使用H5界面来完成与服务端的数据交互,且H5界面在低版本的安卓系统上也能正常加载服务端返回的响应数据,避免了因为服务端安全升级而导致的低版本安卓用户的流失问题。
参照图5,本申请实施例中还提供一种计算机设备,该计算机设备可以是服务器,其内部结构可以如图5所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设计的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储网络请求等数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种发送网络请求的方法。
上述处理器执行上述发送网络请求的方法的步骤:
客户端构建指定网络请求对象;
按照第一预设规则控制所述指定网络请求对象生成第一网络对象及第二网络对象,其中所述第一网络对象及所述第二网络对象均携带有所述服务端当前支持的所述高版本的TLS协议;
将所述客户端对应的安卓系统默认使用的网络请求对象替换为所述指定网络请求对象;
通过所述第一网络对象及所述第二网络对象,向服务端发送第一网络请求。
在一实施例,所述按照第一预设规则控制所述指定网络请求对象生成第一网络对象及第二网络对象的步骤,包括:
获取与所述客户端对应的所述安卓系统的版本信息;
根据所述版本信息,从预设的协议数据库中选取与所述版本信息对应的指定TLS协议数组;
调用与所述客户端对应的安卓系统内的构造方法,并向所述构造方法的参数内写入所述指定TLS协议数组,以生成指定构造方法;
通过所述指定构造方法生成包含所述指定TLS协议数组的所述第一网络对象以及包含所述指定TLS协议数组的所述第二网络对象。
在一实施例,所述根据所述版本信息,从预设的协议数据库中选取与所述版本信息对应的指定TLS协议数组的步骤之前,包括:
对于不同版本信息的安卓系统,生成对应的各TLS协议数组;
将各所述版本信息与各所述TLS协议数组一一对应的存储于所述协议数据库。
在一实施例,所述通过所述第一网络对象及所述第二网络对象,向所述服务端发送第一网络请求的步骤,包括:
获取所述客户端当前的页面对应的页面信息,其中所述页面信息包括原生界面或H5界面;
若所述客户端当前的页面对应的页面信息为原生界面,调用所述第一网络对象及所述第二网络对象向所述服务端发送所述第一网络请求。
在一实施例,所述获取所述客户端当前的页面对应的页面信息的步骤之后,包括:
若所述客户端当前的页面对应的页面信息为H5界面,通过拦截请求方法对由所述客户端对应的安卓系统内的webview发出的第二网络请求的请求动作进行拦截,以得到所述第二网络请求的特定url地址以及特定网络请求参数;
拦截成功后,调用所述第一网络对象及所述第二网络对象向所述服务端发送包含所述特定url地址以及所述特定网络请求参数的所述第一网络请求。
在一实施例,所述通过拦截请求方法对由所述客户端对应的安卓系统内的webview发出的第二网络请求的请求动作进行拦截的步骤之前,包括:
获取与所述客户端对应的安卓系统内的所述webview的指定拦截方法;
对所述指定拦截方法进行重写,以生成包含url地址以及网络请求参数的所述拦截请求方法。
在一实施例,所述调用所述第一网络对象及所述第二网络对象向所述服务端发送包含所述特定url地址以及所述特定网络请求参数的所述第一网络请求的步骤之后,包括:
接收所述服务端返回的对于所述第一网络请求的响应数据流;
将所述响应数据流包装生成与所述webview对应的响应数据对象;
将所述响应数据对象返回至所述webview,以便所述webview对所述响应数据对象进行自动解析后生成与所述第一网络请求相对应的第一网络响应数据。
本领域技术人员可以理解,图5中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定。
本申请一实施例还提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现一种发送网络请求的方法,具体为:
客户端构建指定网络请求对象;
按照第一预设规则控制所述指定网络请求对象生成第一网络对象及第二网络对象,其中所述第一网络对象及所述第二网络对象均携带有所述服务端当前支持的所述高版本的TLS协议;
将所述客户端对应的安卓系统默认使用的网络请求对象替换为所述指定网络请求对象;
通过所述第一网络对象及所述第二网络对象,向服务端发送第一网络请求。
在一实施例,所述按照第一预设规则控制所述指定网络请求对象生成第一网络对象及第二网络对象的步骤,包括:
获取与所述客户端对应的所述安卓系统的版本信息;
根据所述版本信息,从预设的协议数据库中选取与所述版本信息对应的指定TLS协议数组;
调用与所述客户端对应的安卓系统内的构造方法,并向所述构造方法的参数内写入所述指定TLS协议数组,以生成指定构造方法;
通过所述指定构造方法生成包含所述指定TLS协议数组的所述第一网络对象以及包含所述指定TLS协议数组的所述第二网络对象。
在一实施例,所述根据所述版本信息,从预设的协议数据库中选取与所述版本信息对应的指定TLS协议数组的步骤之前,包括:
对于不同版本信息的安卓系统,生成对应的各TLS协议数组;
将各所述版本信息与各所述TLS协议数组一一对应的存储于所述协议数据库。
在一实施例,所述通过所述第一网络对象及所述第二网络对象,向所述服务端发送第一网络请求的步骤,包括:
获取所述客户端当前的页面对应的页面信息,其中所述页面信息包括原生界面或H5界面;
若所述客户端当前的页面对应的页面信息为原生界面,调用所述第一网络对象及所述第二网络对象向所述服务端发送所述第一网络请求。
在一实施例,所述获取所述客户端当前的页面对应的页面信息的步骤之后,包括:
若所述客户端当前的页面对应的页面信息为H5界面,通过拦截请求方法对由所述客户端对应的安卓系统内的webview发出的第二网络请求的请求动作进行拦截,以得到所述第二网络请求的特定url地址以及特定网络请求参数;
拦截成功后,调用所述第一网络对象及所述第二网络对象向所述服务端发送包含所述特定url地址以及所述特定网络请求参数的所述第一网络请求。
在一实施例,所述通过拦截请求方法对由所述客户端对应的安卓系统内的webview发出的第二网络请求的请求动作进行拦截的步骤之前,包括:
获取与所述客户端对应的安卓系统内的所述webview的指定拦截方法;
对所述指定拦截方法进行重写,以生成包含url地址以及网络请求参数的所述拦截请求方法。
在一实施例,所述调用所述第一网络对象及所述第二网络对象向所述服务端发送包含所述特定url地址以及所述特定网络请求参数的所述第一网络请求的步骤之后,包括:
接收所述服务端返回的对于所述第一网络请求的响应数据流;
将所述响应数据流包装生成与所述webview对应的响应数据对象;
将所述响应数据对象返回至所述webview,以便所述webview对所述响应数据对象进行自动解析后生成与所述第一网络请求相对应的第一网络响应数据。
综上所述,本申请实施例中提供的发送网络请求的方法、装置、计算机设备和存储介质,客户端构建指定网络请求对象;按照第一预设规则控制所述指定网络请求对象生成第一网络对象及第二网络对象,其中所述第一网络对象及所述第二网络对象均携带有所述服务端当前支持的所述高版本的TLS协议;将所述客户端对应的安卓系统默认使用的网络请求对象替换为所述指定网络请求对象;通过所述第一网络对象及所述第二网络对象,向服务端发送第一网络请求。通过本申请,使得安装有低版本的安卓系统的客户端在请求支持高版本的TLS协议的服务端的https接口时,能够正常访问https接口,并接收到服务端响应的网络数据,有效地避免了因为服务端安全升级而导致的低版本安卓用户的流失问题。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储与一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的和实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可以包括只读存储器(ROM)、可编程ROM
(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM通过多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双速据率SDRAM(SSRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其它变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其它要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。
以上所述仅为本申请的优选实施例,并非因此限制本申请的专利范围,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本申请的专利保护范围内。
Claims (10)
1.一种发送网络请求的方法,用于安装有低版本的安卓系统的客户端向支持高版本的TLS协议的服务端发送网络请求,其特征在于,包括:
客户端构建指定网络请求对象;
按照第一预设规则控制所述指定网络请求对象生成第一网络对象及第二网络对象,其中所述第一网络对象及所述第二网络对象均携带有所述服务端当前支持的所述高版本的TLS协议;
将所述客户端对应的安卓系统默认使用的网络请求对象替换为所述指定网络请求对象;
通过所述第一网络对象及所述第二网络对象,向所述服务端发送第一网络请求。
2.根据权利要求1所述的发送网络请求的方法,其特征在于,所述按照第一预设规则控制所述指定网络请求对象生成第一网络对象及第二网络对象的步骤,包括:
获取与所述客户端对应的所述安卓系统的版本信息;
根据所述版本信息,从预设的协议数据库中选取与所述版本信息对应的指定TLS协议数组;
调用与所述客户端对应的安卓系统内的构造方法,并向所述构造方法的参数内写入所述指定TLS协议数组,以生成指定构造方法;
通过所述指定构造方法生成包含所述指定TLS协议数组的所述第一网络对象以及包含所述指定TLS协议数组的所述第二网络对象。
3.根据权利要求2所述的发送网络请求的方法,其特征在于,所述根据所述版本信息,从预设的协议数据库中选取与所述版本信息对应的指定TLS协议数组的步骤之前,包括:
对于不同版本信息的安卓系统,生成对应的各TLS协议数组;
将各所述版本信息与各所述TLS协议数组一一对应的存储于所述协议数据库。
4.根据权利要求1所述的发送网络请求的方法,其特征在于,所述通过所述第一网络对象及所述第二网络对象,向所述服务端发送第一网络请求的步骤,包括:
获取所述客户端当前的页面对应的页面信息,其中所述页面信息包括原生界面或H5界面;
若所述客户端当前的页面对应的页面信息为原生界面,调用所述第一网络对象及所述第二网络对象向所述服务端发送所述第一网络请求。
5.根据权利要求4所述的发送网络请求的方法,其特征在于,所述获取所述客户端当前的页面对应的页面信息的步骤之后,包括:
若所述客户端当前的页面对应的页面信息为H5界面,通过拦截请求方法对由所述客户端对应的安卓系统内的webview发出的第二网络请求的请求动作进行拦截,以得到所述第二网络请求的特定url地址以及特定网络请求参数;
拦截成功后,调用所述第一网络对象及所述第二网络对象向所述服务端发送包含所述特定url地址以及所述特定网络请求参数的所述第一网络请求。
6.根据权利要求5所述的发送网络请求的方法,其特征在于,所述通过拦截请求方法对由所述客户端对应的安卓系统内的webview发出的第二网络请求的请求动作进行拦截的步骤之前,包括:
获取与所述客户端对应的安卓系统内的所述webview的指定拦截方法;
对所述指定拦截方法进行重写,以生成包含url地址以及网络请求参数的所述拦截请求方法。
7.根据权利要求5所述的发送网络请求的方法,其特征在于,所述调用所述第一网络对象及所述第二网络对象向所述服务端发送包含所述特定url地址以及所述特定网络请求参数的所述第一网络请求的步骤之后,包括:
接收所述服务端返回的对于所述第一网络请求的响应数据流;
将所述响应数据流包装生成与所述webview对应的响应数据对象;
将所述响应数据对象返回至所述webview,以便所述webview对所述响应数据对象进行自动解析后生成与所述第一网络请求相对应的第一网络响应数据。
8.一种发送网络请求的装置,用于安装有低版本的安卓系统的客户端向支持高版本的TLS协议的服务端发送网络请求,其特征在于,包括:
构建模块,用于构建指定网络请求对象;
生成模块,用于按照第一预设规则控制所述指定网络请求对象生成第一网络对象及第二网络对象,其中所述第一网络对象及所述第二网络对象均携带有所述服务端当前支持的所述高版本的TLS协议;
替换模块,用于将所述客户端对应的安卓系统默认使用的网络请求对象替换为所述指定网络请求对象;
发送模块,用于通过所述第一网络对象及所述第二网络对象,向所述服务端发送第一网络请求。
9.一种计算机设备,包括存储器和处理器,所述存储器中存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7中任一项所述方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811531639.7A CN109802996A (zh) | 2018-12-14 | 2018-12-14 | 发送网络请求的方法、装置、计算机设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811531639.7A CN109802996A (zh) | 2018-12-14 | 2018-12-14 | 发送网络请求的方法、装置、计算机设备和存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109802996A true CN109802996A (zh) | 2019-05-24 |
Family
ID=66556746
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811531639.7A Pending CN109802996A (zh) | 2018-12-14 | 2018-12-14 | 发送网络请求的方法、装置、计算机设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109802996A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110099122A (zh) * | 2019-05-07 | 2019-08-06 | 北京字节跳动网络技术有限公司 | 用于发送网络请求的方法和装置 |
CN110224896A (zh) * | 2019-06-24 | 2019-09-10 | 深圳前海桔子信息技术有限公司 | 一种网络性能数据采集方法、装置、服务器及存储介质 |
CN110830461A (zh) * | 2019-10-28 | 2020-02-21 | 杭州涂鸦信息技术有限公司 | 基于tls长连接的跨区的rpc服务调用方法及系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130111572A1 (en) * | 2011-10-27 | 2013-05-02 | Cellco Partnership D/B/A Verizon Wireless | Ip push platform and connection protocol in a push notification framework |
CN108833541A (zh) * | 2018-06-15 | 2018-11-16 | 北京奇安信科技有限公司 | 一种识别终端信息的方法及装置 |
-
2018
- 2018-12-14 CN CN201811531639.7A patent/CN109802996A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130111572A1 (en) * | 2011-10-27 | 2013-05-02 | Cellco Partnership D/B/A Verizon Wireless | Ip push platform and connection protocol in a push notification framework |
CN108833541A (zh) * | 2018-06-15 | 2018-11-16 | 北京奇安信科技有限公司 | 一种识别终端信息的方法及装置 |
Non-Patent Citations (3)
Title |
---|
CODER_陈: "Android4.X强制使用TLSv1.2", 《CSDN博客》 * |
严振杰: "不同版本的TLS在Android中的支持情况", 《CSDN博客》 * |
小熊爱发明: "Android 让WebView完美支持https双向认证(SSL)", 《CSDN博客》 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110099122A (zh) * | 2019-05-07 | 2019-08-06 | 北京字节跳动网络技术有限公司 | 用于发送网络请求的方法和装置 |
CN110099122B (zh) * | 2019-05-07 | 2020-05-15 | 北京字节跳动网络技术有限公司 | 用于发送网络请求的方法和装置 |
CN110224896A (zh) * | 2019-06-24 | 2019-09-10 | 深圳前海桔子信息技术有限公司 | 一种网络性能数据采集方法、装置、服务器及存储介质 |
CN110224896B (zh) * | 2019-06-24 | 2021-11-26 | 深圳桔子数字技术有限公司 | 一种网络性能数据采集方法、装置及存储介质 |
CN110830461A (zh) * | 2019-10-28 | 2020-02-21 | 杭州涂鸦信息技术有限公司 | 基于tls长连接的跨区的rpc服务调用方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102281311B (zh) | 一种基于开放应用编程接口实现网络业务的方法、系统及装置 | |
CN109802996A (zh) | 发送网络请求的方法、装置、计算机设备和存储介质 | |
KR102105261B1 (ko) | 인터페이스 데이터 디스플레이 방법 및 장치 | |
CN109766262A (zh) | 接口数据处理方法、自动化测试方法、装置、设备和介质 | |
JP6092249B2 (ja) | 埋込まれたプロセス通信のための仮想チャネル | |
CN104821954B (zh) | 一种跨平台远程过程调用方法 | |
CN103942225A (zh) | 一种混合型应用客户端的资源调用方法、客户端及系统 | |
CN104584011B (zh) | 用于web内容和web服务的安全网络内插入的方法和系统 | |
EP2437524A1 (en) | M2m service platform and work method thereof | |
CN102307220B (zh) | 一种跨域网页信息交互方法 | |
CN109547458A (zh) | 登录验证方法、装置、计算机设备及存储介质 | |
CN109802919B (zh) | 一种web网页访问拦截方法及装置 | |
CN110119489A (zh) | 信息自动登记方法、装置、计算机设备及存储介质 | |
CN110020043B (zh) | 页面爬取方法、装置、存储介质及处理器 | |
CN110290112A (zh) | 权限控制方法、装置、计算机设备及存储介质 | |
CN103514395B (zh) | 插件权限控制方法及系统 | |
CN108768960A (zh) | 病毒检测方法、装置、存储介质及计算机设备 | |
CN105095220B (zh) | 一种浏览器实现方法、终端和虚拟化代理装置 | |
KR20120125247A (ko) | 타겟 어플리케이션을 제공하기 위한 방법 | |
CN106980501A (zh) | 一种软件包管理方法、装置和系统 | |
CN112615759B (zh) | 全链路压测组件、全链路压测方法及装置 | |
CN109284454A (zh) | 页面渲染方法、装置、计算机设备及存储介质 | |
CN105812481A (zh) | 一种超文本传输协议请求识别系统及方法 | |
CN109977677A (zh) | 漏洞信息收集方法、装置、设备及可读存储介质 | |
US20170249171A1 (en) | Runtime Configuration of Servlet Filtering Using Dynamic Injection |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190524 |
|
RJ01 | Rejection of invention patent application after publication |