一种流量劫持方法及装置与流程

文档序号:19059695发布日期:2019-11-06 01:39阅读:271来源:国知局
一种流量劫持方法及装置与流程

本发明涉及通信技术领域,尤其涉及一种流量劫持方法及装置。



背景技术:

随着信息技术的快速发展,互联网的应用范围越来越广,终端设备在检测到用户在终端设备的应用程序app上触发网页访问请求时,可以去对应的服务器获取网页访问请求对应的响应数据。然而,为了更好地实现网络加速,app可以在网页访问请求出终端设备之前,对网页访问请求进行劫持,并可以通过cdn服务器从近端服务器获取网页访问请求对应的响应数据,如此,既可以降低远端服务器的压力,又能提高响应速度。

现阶段,苹果操作系统(iphoneoperatingsystem,ios)通常基于wkwebview框架来加载网页访问请求,相应地,用户在ios的app上触发的网页访问请求也由传统的uiwebview网页访问请求转换为wkwebview网页访问请求。传统的uiwebview网页访问请求通常使用nsurlprotocol协议支持的实例对象来拦截uiwebview网页访问请求,nsurlprotocol协议支持的实例对象可以拦截并处理所在进程内的所有网页访问请求;然而,由于wkwebview框架中基于超文本传输协议(hypertexttransferprotocol,http)或https的wkwebview网页访问请求通常在单独的进程中发送,导致nsurlprotocol协议支持的实例对象拦截基于http或https的wkwebview网页访问请求时会出现问题。具体地说,网页访问请求中包括统一资源定位符(uniformresourcelocation,url)地址和请求内容(即body),nsurlprotocol协议支持的实例对象在拦截其它进程的网页访问请求时,可以拦截到正常的url地址,但会丢失部分或全部body;因此,若使用nsurlprotocol协议支持的实例对象拦截基于http或https的wkwebview网页访问请求,则可能会丢失wkwebview网页访问请求中的部分或全部body。

为了解决上述问题,在一种现有的解决方案中,ios中的app在根据用户的触发操作生成wkwebview网页访问请求后,可以解析wkwebview网页访问请求得到原始url地址和body,进而将原始url地址和body拼接在一起作为新的url地址发送出去;如此,nsurlprotocol协议支持的实例对象拦截到新的url地址后,可以解析得到原始url地址和body,从而根据原始url地址和body获取响应数据。然而,wkwebview网页访问请求限定url地址的数据量需要小于1m,且限定url地址需为字符类型(即string类型),因此,该种实现方式无法支持body的数据量超过1m或body的类型为非字符类型的情况,导致无法对基于http或https的wkwebview网页访问请求的流量进行准确地拦截。

综上,目前亟需一种流量劫持方法,用以实现对基于http或https的wkwebview网页访问请求的流量进行准确地拦截。



技术实现要素:

本发明实施例提供一种流量劫持方法,用以实现对基于http或https的wkwebview网页访问请求的流量进行准确地拦截。

第一方面,本发明实施例提供了一种流量劫持方法,所述方法应用于流量劫持装置,所述流量劫持装置设置在终端设备的预设应用程序中;所述方法包括:

根据用户在所述预设应用程序中的触发操作,生成基于超文本传输协议的第一wkwebview页面访问请求,并通过所述预设应用程序中设置的第一实例对象获取所述第一wkwebview页面访问请求对应的响应数据;其中,所述第一实例对象支持wkurlschemehandler协议,所述第一实例对象用于拦截所述第一wkwebview页面访问请求并获取所述第一wkwebview页面访问请求对应的响应数据。

在上述设计中,ios系统中wkurlschemehandler协议支持的实例对象可以拦截处于不同进程内的wkwebview页面访问请求,因此,通过在预设应用程序中设置支持wkurlschemehandler协议的第一实例对象,可以使得第一实例对象拦截到预设应用程序中触发的任一wkwebview页面访问请求(包括http或https的wkwebview网页访问请求),从而可以实现对基于http或https的wkwebview网页访问请求的流量进行准确地拦截。

在一种可能的设计中,所述通过所述预设应用程序中设置的第一实例对象获取所述第一wkwebview页面访问请求对应的响应数据,包括:查询所述第一实例对象对应的第一预设空间中是否存在所述第一wkwebview页面访问请求对应的响应数据,若不存在,则将所述第一wkwebview页面访问请求发送给第二对象实例,并通过所述第二对象实例获取所述第一wkwebview页面访问请求对应的响应数据。

在一种可能的设计中,所述第二实例对象支持nsurlprotocol协议,所述第一实例对象与所述第二实例对象位于同一进程内。

在上述设计中,由于支持nsurlprotocol协议的第二实例对象可以拦截并处理所在进程内的所有网页访问请求,并能准确获取对应的响应数据,因此,通过联合支持wkurlschemehandler协议的第一实例对象和支持nsurlprotocol协议的第二实例对象,可以准确地拦截到第一wkwebview页面访问请求,提高流量拦截的准确性和全面性;且,通过设置第一实例对象对应的第一预设空间,可以使用第一预设空间存储第一实例对象获取到的历史响应数据,如此,第一实例对象在拦截到第一wkwebview页面访问请求后,若第一预设空间中存在第一wkwebview页面访问请求对应的响应数据,则第一实例对象可以直接将第一预设空间中的第一wkwebview页面访问请求对应的响应数据发送给app,而无需重复执行调用第二实例对象和/或cdn服务器获取响应数据,从而可以提高响应速度,并可以降低系统资源占用率。

在一种可能的设计中,所述通过所述第二对象实例获取所述第一wkwebview页面访问请求对应的响应数据,包括:查询所述第二实例对象对应的第二预设空间中是否存在所述第一wkwebview页面访问请求对应的响应数据,若不存在,则将所述第一wkwebview页面访问请求发送给内容分发网络cdn服务器;进一步地,获取所述cdn服务器发送的所述第一wkwebview页面访问请求对应的响应数据后,依次通过所述第二实例对象、所述第一实例对象和所述预设应用程序将所述响应数据显示给所述用户。

在上述设计中,通过设置第二实例对象对应的第二预设空间,可以使用第二预设空间存储第二实例对象获取到的历史响应数据,如此,第二实例对象在接收到第一实例对象发送的第一wkwebview页面访问请求后,若第二预设空间中存在第一wkwebview页面访问请求对应的响应数据,则第二实例对象可以直接将第二预设空间中的第一wkwebview页面访问请求对应的响应数据发送给第一实例对象,而无需从cdn服务器中获取响应数据,从而可以提高响应速度,并可以降低系统资源占用率。

在一种可能的设计中,所述方法还包括:设置所述第一wkwebview页面访问请求在所述第一实例对象中的第一标识以及在所述第二实例对象中的第二标识,在通过所述第二实例对象获取所述响应数据后,调用所述第二标识对应的响应方法将所述响应数据发送给所述第一实例对象;进一步地,在通过所述第一实例对象获取所述响应数据后,调用所述第一标识对应的响应方法将所述响应数据发送给所述预设应用程序,并通过所述预设应用程序将所述响应数据显示给所述用户。

在上述设计中,通过设置第一wkwebview页面访问请求在第一实例对象中的第一标识以及在第二实例对象中的第二标识,可以使得第一实例对象调用第一标识对应的响应方法发送响应数据,以及第二实例对象调用第二标识对应的响应方法发送响应数据,保证响应数据在第一实例对象和第二实例对象传输的稳定性和准确性。

在一种可能的设计中,所述通过所述第一实例对象获取所述第一wkwebview页面访问请求对应的响应数据之后,还包括:将所述响应数据存储在所述第一预设空间中。

第二方面,本发明实施例提供了一种流量劫持装置,所述流量劫持装置设置在终端设备的预设应用程序中,所述装置包括:

生成模块,用于根据用户在预设应用程序中的触发操作,生成基于超文本传输协议的第一wkwebview页面访问请求;

获取模块,用于通过所述预设应用程序中设置的第一实例对象获取所述第一wkwebview页面访问请求对应的响应数据;

其中,所述第一实例对象支持wkurlschemehandler协议,所述第一实例对象用于拦截所述第一wkwebview页面访问请求并获取所述第一wkwebview页面访问请求对应的响应数据。

在一种可能的设计中,所述获取模块具体用于:查询所述第一实例对象对应的第一预设空间中是否存在所述第一wkwebview页面访问请求对应的响应数据,若不存在,则将所述第一wkwebview页面访问请求发送给第二对象实例,并通过所述第二对象实例获取所述第一wkwebview页面访问请求对应的响应数据。

在一种可能的设计中,所述第二实例对象支持nsurlprotocol协议,所述第一实例对象与所述第二实例对象位于同一进程内。

在一种可能的设计中,所述获取模块具体用于:查询所述第二实例对象对应的第二预设空间中是否存在所述第一wkwebview页面访问请求对应的响应数据,若不存在,则将所述第一wkwebview页面访问请求发送给内容分发网络cdn服务器;进一步地,获取所述cdn服务器发送的所述第一wkwebview页面访问请求对应的响应数据后,依次通过所述第二实例对象、所述第一实例对象和所述预设应用程序将所述响应数据显示给所述用户。

在一种可能的设计中,所述装置还包括处理模块,所述处理模块用于:设置所述第一wkwebview页面访问请求在所述第一实例对象中的第一标识以及在所述第二实例对象中的第二标识,在通过所述第二实例对象获取所述响应数据后,调用所述第二标识对应的响应方法将所述响应数据发送给所述第一实例对象;进一步地,通过所述第一实例对象获取所述响应数据后,调用所述第一标识对应的响应方法将所述响应数据发送给所述预设应用程序,并通过所述预设应用程序将所述响应数据显示给所述用户。

在一种可能的设计中,所述获取模块还用于:将所述响应数据存储在所述第一预设空间中。

第三方面,本发明实施例提供了一种计算设备,包括至少一个处理单元以及至少一个存储单元,其中,所述存储单元存储有计算机程序,当所述程序被所述处理单元执行时,使得所述处理单元执行上述第一方面任一项所述的流量劫持方法。

第四方面,本发明实施例提供了一种计算机可读存储介质,其存储有可由计算设备执行的计算机程序,当所述程序在所述计算设备上运行时,使得所述计算设备执行上述第一方面任一项所述的流量劫持方法。

本申请的这些方面或其他方面在以下实施例的描述中会更加简明易懂。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的一种流量劫持方法的流程示意图;

图2为本发明实施例提供的一种流量劫持方法的交互流程示意图;

图3为本发明实施例提供的一种流量劫持装置的结构示意图。

具体实施方式

为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

图1为本发明实施例提供的一种流量劫持方法的流程示意图,该方法应用于流量劫持装置;其中,流量劫持装置设置在终端设备的预设应用程序中,流量劫持装置可以拦截终端设备中生成的网页请求,并可以从流量劫持装置的内部或内容分发网络(contentdeliverynetwork,cdn)系统中获取网页请求对应的响应数据;该方法包括:

步骤101,根据用户在预设应用程序中的触发操作,生成基于超文本传输协议的第一wkwebview页面访问请求。

本发明实施例中,终端设备可以为加载有ios系统的终端设备,比如加载有ios系统的手机、加载有ios系统的平板电脑或加载有ios系统的ipad等,具体不作限定。相应地,预设app可以为安装在终端设备上且支持wkwebview框架的app。

在一种可能的实现方式中,用户可以通过前端网络框架交互的方式触发预设app生成第一wkwebview页面访问请求,比如用户可以通过点击预设app上的预设图标或预设超链接触发预设app生成第一wkwebview页面访问请求,或者用户也可以在预设app的文本框中输入预设链接触发预设app生成第一wkwebview页面访问请求,或者用户还可以调用浏览器访问wkwebview页面触发预设app生成第一wkwebview页面访问请求,等等。可以理解的,用户还可以通过其它方式触发预设app生成第一wkwebview页面访问请求,比如语音触发、脑电波触发或遥控触发等等,本发明对此不作具体限定。

需要说明的是,本发明实施例不限定前端网络框架的类型,比如可以为ajax框架、jquery框架或vue框架中的任意一种。

步骤102,通过所述预设应用程序中设置的第一实例对象获取所述第一wkwebview页面访问请求对应的响应数据。

此处,第一实例对象可以为支持wkurlschemehandler协议的实例对象。本发明实施例在预设app中设置了支持wkurlschemehandler协议的第一实例对象,从而使得预设app可以使用第一实例对象拦截基于http和/或https的wkwebview页面访问请求。

需要说明的是,wkurlschemehandler协议为基于ios系统的wkwebview框架设置的协议,该协议可以添加在用户自定义的scheme中,从而可以拦截用户自定义的协议对应的wkwebview页面访问请求。举例来说,若用户在app中设置了一种自定义协议,则在app中添加支持wkurlschemehandler协议的程序后,该app可以使用wkurlschemehandler协议拦截类型为自定义协议的wkwebview页面访问请求。

综上所述,由于ios系统中现有的wkurlschemehandler协议仅支持拦截自定义的协议对应的wkwebview页面访问请求,而预设app生成的第一wkwebview页面访问请求是基于http和/或https的wkwebview页面访问请求,http和/或https为已约定俗成的协议,而并不属于自定义的协议;因此,若直接设置预设app支持现有的wkurlschemehandler协议,则预设app并不能拦截到第一wkwebview页面访问请求。

在一种可能的实现方式中,为了解决上述问题,可以先创建一个支持wkurlschemehandler协议的第一实例对象,再通过配置第一实例对象的属性信息使得第一实例对象能够拦截到基于http和/或https的wkwebview页面访问请求。其中,创建第一实例对象和配置第一实例对象的属性信息可以通过如下的程序来实现:

wkwebschemehandler*handle=[[wkwebschemehandleralloc]init];

[configurationseturlschemehandler:handleforurlscheme:@"http"];

[configurationseturlschemehandler:handleforurlscheme:@"https"];

其中,第一行程序用于创建支持wkurlschemehandler协议的第一实例对象handle,并为第一实例对象handle分配了初始空间,初始空间所占用的内存满足[wkwebschemehandleralloc]的要求;相应地,第二行程序和第三行程序用于配置第一实例对象handle的属性信息,通过第二行程序可以使得第一实例对象拦截到基于http的wkwebview页面访问请求,通过第三行程序可以使得第一实例对象拦截到基于https的wkwebview页面访问请求。

进一步地,通过创建第一实例对象以及配置第一实例对象的属性信息,使得第一实例对象可以拦截到基于http和/或https的wkwebview页面访问请求;然而,针对于任一wkwebview页面访问请求(可以为任意类型的页面访问请求,既可以为基于http和/或https的页面访问请求,也可以为其他类型的页面访问请求,不作限定),wkwebview框架在检测到生成该wkwebview页面访问请求后,都会先调用私有类方法handlesurlscheme确定该wkwebview页面访问请求是否满足wkwebschemehandler协议的要求。若该wkwebview页面访问请求满足wkwebschemehandler协议的要求,则私有类方法handlesurlscheme会向该第一实例对象返回“yes”,以使第一实例对象根据拦截到的该wkwebview页面访问请求获取该wkwebview页面访问请求对应的响应数据;相应地,若该wkwebview页面访问请求不满足wkwebschemehandler协议的要求,则私有类方法handlesurlscheme会向该第一实例对象返回“no”,如此,第一实例对象后续不会对拦截到的该wkwebview页面访问请求做任何处理。

基于该原理,若直接使用ios系统中现有的私有类方法handlesurlscheme,则当第一实例对象拦截到基于http和/或https的第一wkwebview页面访问请求后,第一实例对象会调用现有的私有类方法handlesurlscheme确定第一wkwebview页面访问请求是否满足wkwebschemehandler协议的要求;由于wkwebschemehandler协议仅支持自定义的协议对应的wkwebview页面访问请求,而无法支持http和/或https的第一wkwebview页面访问请求,因此现有的私有类方法handlesurlscheme会向第一实例对象返回“no”,导致第一实例对象无法对拦截到的第一wkwebview页面访问请求做任何处理。

为了解决这个问题,本发明实施例修改了现有的私有类方法handlesurlscheme,使得私有类方法handlesurlscheme在检测到第一实例对象拦截到的wkwebview页面访问请求为基于http和/或https的wkwebview页面访问请求时,会向第一实例对象返回“yes”。如此,第一实例对象拦截到基于http和/或https的第一wkwebview页面访问请求后,该私有类方法handlesurlscheme判断第一wkwebview页面访问请求为基于http和/或https的wkwebview页面访问请求,因此可以向第一实例对象返回“yes”,以使第一实例对象可以根据拦截到的第一wkwebview页面访问请求获取第一wkwebview页面访问请求对应的响应数据。

在一种可能的实现方式中,第一wkwebview页面访问请求对应的响应数据可以存在如下三种情形:

情形一,第一wkwebview页面访问请求对应的响应数据存储在第一实例对象对应的第一预设空间中;

情形二,第一wkwebview页面访问请求对应的响应数据存储在第二实例对象对应的第二预设空间中;

情形三,第一wkwebview页面访问请求对应的响应数据既不存储在第一实例对象对应的第一预设空间中,也不存储在第二实例对象对应的第二预设空间中。

需要说明的是,本发明实施例中的第二实例对象可以为支持nsurlprotocol协议的实例对象,第一实例对象与第二实例对象可以位于同一进程内。

基于情形一~情形三,具体实施中,第一实例对象拦截到第一wkwebview页面访问请求并接收到私有类方法handlesurlscheme返回的“yes”后,可以查询第一实例对象对应的第一预设空间,确定第一预设空间中是否存在第一wkwebview页面访问请求对应的响应数据。若第一预设空间中存在第一wkwebview页面访问请求对应的响应数据,则第一实例对象可以将第一wkwebview页面访问请求对应的响应数据发送至预设app,以使预设app根据第一wkwebview页面访问请求对应的响应数据向用户显示第一wkwebview页面访问请求对应的页面。相应地,若第一预设空间中不存在第一wkwebview页面访问请求对应的响应数据,则第一实例对象可以将第一wkwebview页面访问请求发送至第二实例对象,如此,第二实例对象在接收到第一wkwebview页面访问请求后,可以查询第二实例对象对应的第二预设空间,确定第二预设空间中是否存在第一wkwebview页面访问请求对应的响应数据。

进一步地,若第二预设空间中存在第一wkwebview页面访问请求对应的响应数据,则第二实例对象可以将第一wkwebview页面访问请求对应的响应数据发送至第一实例对象,如此,第一实例对象可以将第一wkwebview页面访问请求对应的响应数据发送至预设app,以使预设app根据第一wkwebview页面访问请求对应的响应数据向用户显示第一wkwebview页面访问请求对应的页面。相应地,若第二预设空间中不存在第一wkwebview页面访问请求对应的响应数据,则第二实例对象可以将第一wkwebview页面访问请求发送至cdn服务器;其中,cdn服务器可以为cdn系统中的任一服务器,比如可以为边缘节点服务器、中间节点服务器,或者也可以为源站,在此不作限定。如此,cdn服务器可以先从近端资源服务器查找第一wkwebview页面访问请求对应的响应数据,若未查找到,则去远端资源服务器查找得到第一wkwebview页面访问请求对应的响应数据,进而将第一wkwebview页面访问请求对应的响应数据发送给第二实例对象,以使第二实例对象将第一wkwebview页面访问请求对应的响应数据发送给第一实例对象,再使第一实例对象将第一wkwebview页面访问请求对应的响应数据发送给预设app,通过预设app向用户显示第一wkwebview页面访问请求对应的页面。

在一个示例中,第二实例对象在获取到cdn服务器发送的第一wkwebview页面访问请求对应的响应数据之后,还可以将响应数据存储在第二预设空间中;相应地,第一实例对象在获取到第二实例对象发送的第一wkwebview页面访问请求对应的响应数据之后,还可以将响应数据存储在第一预设空间中。

本发明实施例中,通过设置第一实例对象对应的第一预设空间,可以使用第一预设空间存储第一实例对象获取到的历史响应数据。如此,第一实例对象在拦截到第一wkwebview页面访问请求后,若第一预设空间中存在第一wkwebview页面访问请求对应的响应数据,则第一实例对象可以直接将第一预设空间中的第一wkwebview页面访问请求对应的响应数据发送给app,而无需重复执行调用第二实例对象和/或cdn服务器获取响应数据,从而可以提高响应速度,提高处理速度。同理,通过设置第二实例对象对应的第二预设空间,可以进一步地提高响应速度,提高处理速度。

需要说明的是,第二实例对象可以支持现有的nsurlprotocol协议,由于现有的nsurlprotocol协议可以拦截并处理所在进程内的所有页面访问请求,若第一实例对象在第一预设空间中未查询到第一wkwebview页面访问请求对应的响应数据,使得第一实例对象在所在的进程内发送第一wkwebview页面访问请求时,由于第一实例对象与第二实例对象位于同一进程内,因此,第二实例对象可以拦截并处理第一wkwebview页面访问请求。

本发明实施例中,通过在预设app中创建支持wkurlschemehandler协议的第一实例对象、配置第一实例对象的属性以及修改私有方法类handlesurlscheme,使得第一实例对象可以拦截并处理预设app中触发的基于http和或/https的wkwebview页面访问请求;且,通过在预设app中创建支持nsurlprotocol协议且与第一实例对象处于同一进程的第二实例对象,使得第二实例对象可以拦截并处理所在进程内的所有网页访问请求,并能准确获取对应的响应数据。因此,通过使用支持wkurlschemehandler协议的第一实例对象和支持nsurlprotocol协议的第二实例对象,可以准确地拦截预设app中触发的基于http和或/https的wkwebview页面访问请求,并可以准确地获取到对应的响应数据,实现对基于http和或/https的wkwebview页面访问请求的准确获取。

在一种可能的实现方式中,若第一预设空间中不存在第一wkwebview页面访问请求对应的响应数据,则第一实例对象在将第一wkwebview页面访问请求发送至第二实例对象之前,还可以设置第一wkwebview页面访问请求在第一实例对象中的第一标识;相应地,若第二预设空间中不存在第一wkwebview页面访问请求对应的响应数据,则第二实例对象在将第一wkwebview页面访问请求发送至cdn服务器之前,还可以设置第一wkwebview页面访问请求在第二实例对象中的第二标识。如此,第二实例对象在接收到cdn服务器发送的第一wkwebview页面访问请求对应的响应数据后,可以调用第二标识对应的响应方法将第一wkwebview页面访问请求对应的响应数据发送给第一实例对象;相应地,第一实例对象在接收到第二实例对象发送的第一wkwebview页面访问请求对应的响应数据后,可以调用第一标识对应的响应方法将第一wkwebview页面访问请求对应的响应数据发送给预设app,以通过预设app向用户显示对应的页面。

在一个示例中,第一wkwebview页面访问请求与第一标识的对应关系可以以键值对的方式存储在第一实例对象中,第一wkwebview页面访问请求与第二标识的对应关系也可以以键值对的方式存储在第二实例对象中。比如第一实例对象和第二实例对象中均可以设置有键值对数据库,第一实例对象在生成第一wkwebview页面访问请求对应的第一标识后,可以以第一wkwebview页面访问请求为键、第一标识为键对应的值,将第一wkwebview页面访问请求和第一标识的对应关系存储在第一实例对象的键值对数据库中;相应地,第二实例对象在生成第一wkwebview页面访问请求对应的第二标识后,可以以第一wkwebview页面访问请求为键、第二标识为键对应的值,将第一wkwebview页面访问请求和第二标识的对应关系存储在第二实例对象的键值对数据库中。

具体实施中,以第一实例对象为例,若第一实例对象接收到第二实例对象发送的第一wkwebview页面访问请求对应的响应数据,则第一实例对象可以从第一实例对象的键值对数据里中查询确定第一wkwebview页面访问请求对应的第一标识,进而以第一标识对应的响应方法将第一wkwebview页面访问请求对应的响应数据发送给预设app。若第一实例对象在预设时长内未接收到第二实例对象发送的第一wkwebview页面访问请求对应的响应数据,或者接收到第二实例对象发送的异常响应消息,则第一实例对象可以从第一实例对象的键值对数据里中查询确定第一wkwebview页面访问请求对应的第一标识,进而以第一标识对应的异常响应方法将向预设app发送请求异常的指示信息。

本发明实施例中,通过设置第一wkwebview页面访问请求在第一实例对象中的第一标识以及在第二实例对象中的第二标识,可以使得第一实例对象调用第一标识对应的响应方法发送响应数据,以及第二实例对象调用第二标识对应的响应方法发送响应数据,保证响应数据在第一实例对象和第二实例对象传输的稳定性和准确性。

基于图1所示意的流量劫持方法,图2为本发明实施例提供的一种流量劫持方法的交互流程示意图,下面结合图2对本发明实施例中流量劫持方法的具体实现过程进行介绍。

可以理解的,本发明实施例中流量劫持方法不仅涉及到终端设备前端的预设app、预设app后台的第一实例对象和第二实例对象,还涉及到cdn服务器,cdn服务器可以为cdn系统中的任一服务器,比如可以为边缘节点服务器、中间服务器,或者也可以为源站,在此不作限定。

步骤201,预设app根据用户的触发操作,生成基于http和/或https的第一wkwebview页面访问请求。

此处,预设app在生成第一wkwebview页面访问请求后,可以在http和/或https对应的进程内发送第一wkwebview页面访问请求。

步骤202,第一实例对象拦截预设app中的第一wkwebview页面访问请求。

在一个示例中,第一实例对象可以随着预设app的启动一同启动,并随着预设app的退出一并清空,即第一实例对象的生命周期与预设app的生命周期可以相同,从而降低系统的资源占用情况。

本发明实施例中,第一实例对象在启动时,还可以自动为预设app注册第二实例对象。

步骤203,第一实例对象查询确定第一实例对象对应的第一预设空间中是否包括第一wkwebview页面访问请求对应的响应数据,若包含,则跳至步骤204a,若不包含,则跳至步骤204b。

步骤204a,第一实例对象从第一实例对象对应的第一预设空间中获取第一wkwebview页面访问请求对应的响应数据,并将第一wkwebview页面访问请求对应的响应数据发送至预设app,进而跳至步骤213。

步骤204b,第一实例对象设置第一wkwebview页面访问请求在第一实例对象中的第一标识,并将第一wkwebview页面访问请求与第一标识的对应关系存储在第一实例对象的键值对数据库中。

步骤205,第一实例对象将第一wkwebview页面访问请求发送至第二实例对象。

具体实施中,由于第一实例对象与第二实例对象在同一个进程内,而第二实例对象可以拦截并处理所在进程中发送的全部wkwebview页面访问请求,因此,第一实例对象可以直接将第一wkwebview页面访问请求发送至所在的进程中。

步骤206,第二实例对象查询确定第二实例对象对应的第二预设空间中是否包括第一wkwebview页面访问请求对应的响应数据,若包含,则跳至步骤207a,若不包含,则跳至步骤207b。

步骤207a,第二实例对象从第二实例对象对应的第二预设空间中获取第一wkwebview页面访问请求对应的响应数据,并将第一wkwebview页面访问请求对应的响应数据发送至第一实例对象,进而跳转至步骤212。

步骤207b,第二实例对象设置第一wkwebview页面访问请求在第二实例对象中的第二标识,并将第一wkwebview页面访问请求与第二标识的对应关系存储在第二实例对象的键值对数据库中。

步骤208,第二实例对象将第一wkwebview页面访问请求发送至cdn服务器。

步骤209,cdn服务器获取第一wkwebview页面访问请求对应的响应数据。

此处,cdn服务器可以先从近端资源服务器获取第一wkwebview页面访问请求对应的响应数据,若未获取到,则再从远端资源服务器获取第一wkwebview页面访问请求对应的响应数据。

步骤210,cdn服务器将第一wkwebview页面访问请求对应的响应数据发送至第二实例对象。

步骤211,第二实例对象从第二实例对象的键值对数据库中获取第一wkwebview页面访问请求对应的第二标识,并调用第二标识对应的响应方法将第一wkwebview页面访问请求对应的响应数据发送至第一实例对象。

步骤212,第一实例对象从第一实例对象的键值对数据库中获取第一wkwebview页面访问请求对应的第一标识,并调用第一标识对应的响应方法将第一wkwebview页面访问请求对应的响应数据发送至预设app。

步骤213,预设app根据第一wkwebview页面访问请求对应的响应数据,将第一wkwebview页面访问请求对应的页面显示给用户。

本发明的上述实施例中,根据用户在预设应用程序中的触发操作,生成基于超文本传输协议的第一wkwebview页面访问请求,并通过所述预设应用程序中设置的第一实例对象获取所述第一wkwebview页面访问请求对应的响应数据;其中,所述第一实例对象支持wkurlschemehandler协议,所述第一实例对象用于拦截所述第一wkwebview页面访问请求并获取所述第一wkwebview页面访问请求对应的响应数据。本发明实施例中,ios系统中wkurlschemehandler协议支持的实例对象可以拦截处于不同进程内的wkwebview页面访问请求,因此,通过在预设应用程序中设置支持wkurlschemehandler协议的第一实例对象,可以使得第一实例对象拦截到预设应用程序中触发的任一wkwebview页面访问请求(包括http或https的wkwebview网页访问请求),从而可以实现对基于http或https的wkwebview网页访问请求的流量进行准确地拦截。

针对上述方法流程,本发明实施例还提供一种流量劫持装置,该装置的具体内容可以参照上述方法实施。

图3为本发明实施例提供的一种流量劫持装置的结构示意图,所述装置设置在终端设备的预设应用程序中,所述装置包括:

生成模块301,用于根据用户在预设应用程序中的触发操作,生成基于超文本传输协议的第一wkwebview页面访问请求;

获取模块302,用于通过所述预设应用程序中设置的第一实例对象获取所述第一wkwebview页面访问请求对应的响应数据;

其中,所述第一实例对象支持wkurlschemehandler协议,所述第一实例对象用于拦截所述第一wkwebview页面访问请求并获取所述第一wkwebview页面访问请求对应的响应数据。

可选地,所述获取模块302具体用于:

查询所述第一实例对象对应的第一预设空间中是否存在所述第一wkwebview页面访问请求对应的响应数据,若不存在,则将所述第一wkwebview页面访问请求发送给第二对象实例,并通过所述第二对象实例获取所述第一wkwebview页面访问请求对应的响应数据。

可选地,所述第二实例对象支持nsurlprotocol协议,所述第一实例对象与所述第二实例对象位于同一进程内。

可选地,所述获取模块302具体用于:

查询所述第二实例对象对应的第二预设空间中是否存在所述第一wkwebview页面访问请求对应的响应数据,若不存在,则将所述第一wkwebview页面访问请求发送给内容分发网络cdn服务器;

获取所述cdn服务器发送的所述第一wkwebview页面访问请求对应的响应数据后,依次通过所述第二实例对象、所述第一实例对象和所述预设应用程序将所述响应数据显示给所述用户。

可选地,所述装置还包括处理模块303,所述处理模块303用于:

设置所述第一wkwebview页面访问请求在所述第一实例对象中的第一标识以及在所述第二实例对象中的第二标识;

通过所述第二实例对象获取所述响应数据后,调用所述第二标识对应的响应方法将所述响应数据发送给所述第一实例对象;

通过所述第一实例对象获取所述响应数据后,调用所述第一标识对应的响应方法将所述响应数据发送给所述预设应用程序;

通过所述预设应用程序将所述响应数据显示给所述用户。

可选地,所述获取模块302还用于:

将所述响应数据存储在所述第一预设空间中。

从上述内容可以看出:本发明的上述实施例中,根据用户在预设应用程序中的触发操作,生成基于超文本传输协议的第一wkwebview页面访问请求,并通过所述预设应用程序中设置的第一实例对象获取所述第一wkwebview页面访问请求对应的响应数据;其中,所述第一实例对象支持wkurlschemehandler协议,所述第一实例对象用于拦截所述第一wkwebview页面访问请求并获取所述第一wkwebview页面访问请求对应的响应数据。本发明实施例中,ios系统中wkurlschemehandler协议支持的实例对象可以拦截处于不同进程内的wkwebview页面访问请求,因此,通过在预设应用程序中设置支持wkurlschemehandler协议的第一实例对象,可以使得第一实例对象拦截到预设应用程序中触发的任一wkwebview页面访问请求(包括http或https的wkwebview网页访问请求),从而可以实现对基于http或https的wkwebview网页访问请求的流量进行准确地拦截。

基于同一发明构思,本发明实施例还提供一种计算设备,包括至少一个处理单元以及至少一个存储单元,其中,所述存储单元存储有计算机程序,当所述程序被所述处理单元执行时,使得所述处理单元执行如图1或图2任意所述的流量劫持方法。

基于同一发明构思,本发明实施例还提供一种计算机可读存储介质,其存储有可由计算设备执行的计算机程序,当所述程序在所述计算设备上运行时,使得所述计算设备执行如图1或图2任意所述的流量劫持方法。

本领域内的技术人员应明白,本发明的实施例可提供为方法、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1