一种iOS上针对APP的HTTP流量引导的方法

文档序号:7802125阅读:647来源:国知局
一种iOS上针对APP的HTTP流量引导的方法
【专利摘要】本发明公开一种iOS上针对APP的HTTP流量引导的方法,包括以下步骤:步骤1:iOS系统实时监测HTTP流量,如果出现HTTP流量,则记录产生HTTP流量的应用软件,同时拦截原生HTTPAPI获取系统全局代理的函数;步骤2:构造代理函数,该代理函数实现原生HTTPAPI获取系统全局代理的函数的所有功能;步骤3:查找应用软件HTTP_APP的镜像头部,找到获取当前网络的代理信息的函数,将该函数的地址替换步骤2中构造的函数地址;步骤4:iOS系统的原生HTTPAPI发起HTTP请求时,调用步骤2构造的代理函数,该函数将返回自定义的代理信息,并对代理信息的有效性进行检测;当代理信息中的地址有效时,将连接该指定的地址,并将HTTP请求构造成HTTP代理请求发往指定的代理服务器,从而实现指定代理。
【专利说明】—种iOS上针对APP的HTTP流量引导的方法
【技术领域】
[0001]本发明涉及iOS上流量引导,尤其是在iOS上针对APP而非全局的HTTP流量做引导的方法。
【背景技术】
[0002]iOS上原生的最上层的HTTP API是NSURL,该类API调用简便,但没办法指定代理,它会自动获取设置在系统级别的全局代理。这在一些场合,例如APP本身不想要受全局代理的影响,或者想要自己指定代理等场合,就不能适用。

【发明内容】

[0003]因此,针对上述的问题,本发明提出一种iOS上针对APP的HTTP流量引导的方法,解决APP使用iOS最上层的原生HTTP API,但想要不受全局代理的影响或者想要自己指定代理的问题。
[0004]具体的,本发明所采用的技术方案是,一种iOS上针对APP的HTTP流量引导的方法,包括以下步骤:
步骤1:10S系统实时监测HTTP流量,如果出现HTTP流量,则记录产生HTTP流量的应用软件(例如需要加速或引导流量的APP应用软件),将该产生HTTP流量的应用软件记为HTTP_APP,同时拦截原生HTTP API获取系统全局代理的函数(函数SCDynamicStoreCopyProxies);
步骤2:构造代理函数,该代理函数实现原生HTTP API获取系统全局代理的函数(函数SCDynamicStoreCopyProxies)的所有功能,该代理函数建立后,由原生HTTP API调用,实现代理;该代理函数返回包含代理信息的结构,该代理信息至少包括代理主机、代理端口 ;步骤3:查找应用软件HTTP_APP在内存当中的镜像头部,找到获取当前网络的代理信息的函数(函数名字为SCDynamicStoreCopyProxies),将该函数的地址替换步骤2中构造的函数地址;
步骤4:10S系统的原生HTTP API发起HTTP请求时,调用步骤2构造的代理函数,该函数将返回自定义的代理信息,并对代理信息的有效性进行检测;当代理信息中的地址有效时,将连接该指定的地址,并将HTTP请求构造成HTTP代理请求发往指定的代理服务器,从而实现指定代理,也就实现了 HTTP流量引导。
[0005]另外,还可将上述过程实现封装成一个SDK供APP应用软件调用,APP应用软件在启动阶段调用该SDK来实现SCDynamicStoreCopyProxies此API的拦截,并设置代理服务器地址,接下来APP所有HTTP请求将被引导到所设置的代理服务器。
[0006]其中,iOS系统的原生HTTP API发起的HTTP请求,首先通过预处理,然后再发送出去,该预处理包括如果过程:该HTTP请求首先检测该HTTP请求要访问的域名与HTTP_APP的域名是否相同,如果两者不相同,则将HTTP请求要访问的域名改为HTTP_APP的域名;然后检测HTTP请求的指定代理行(首部〈headers〉之后的一行)是否为空,如果不为空,则将其改为空白行,然后再将该HTTP请求发送出去。通过上述设置,可以对HTTP请求的有效性进行维护,避免后续指定代理时候出现代理出错,而导致该方法不能用,进而导致HTTP_APP的无法使用。
[0007]进一步的,所述步骤I中,拦截原生HTTP API获取系统全局代理的函数,其包括以下过程:
步骤11:获取HTTP_APP进程的地址;
步骤12:查找HTTP_APP在内存中的镜像头部,获取系统全局代理的函数(函数SCDynamicStoreCopyProxies)的地址,将该地址替换为自己构造的获取代理信息的函数地址,进而实现对原生HTTP API的全局代理函数的拦截。
[0008]另外,在iOS下切换代理必须通过系统设置,相对麻烦。通过方案,还可在APP运行阶段的任意时刻切换HTTP代理。因此,所述步骤4中,对代理信息中的有效性进行检测,当检测到代理出现问题时,即可立即切换代理地址或者不指定代理地址,从而保证上述方法的正常运行。步骤如下:
步骤41:对代理信息中的有效性进行检测,如果代理信息无效,则检测HTTP请求是否发生错误;
步骤42:如果HTTP请求发生错误,则首先检测HTTP代理服务器是否出现问题,如果代理服务器出现问题,则立即通过设置代理地址来更换代理服务器、或者禁止使用指定代理使HTTP请求直接回源;如果代理服务器没有出现问题,则自动重新发送HTTP请求。
[0009]本发明采用上述方案,解决APP使用iOS最上层的原生HTTP API,但想要不受全局代理的影响或者想要自己指定代理的问题;同时为APP开发者提供了极其简便的方式,无须改动HTTP请求代码即可实现代理;当系统全局代理出现问题时,可跳过系统代理直接回源,从而使APP可正常运行。
【具体实施方式】
[0010]现结合【具体实施方式】对本发明进一步说明。
[0011]本发明提供了流量引导的方法,构建一个iOS SDK供iOS APP调用,使得APP本身可以自己决定要不要使用全局代理或者使用自己部署的代理。SDK具备如下两大功能:(I)拦截原生HTTP API获取系统全局代理的函数。(2)构造指定代理的数据返回给HTTP API。
[0012]具体的,本发明所采用的技术方案是,一种iOS上针对APP的HTTP流量引导的方法,包括以下步骤:
步骤1:1OS系统实时监测HTTP流量,如果出现HTTP流量,则记录产生HTTP流量的应用软件(例如需要加速或引导流量的APP应用软件),将该产生HTTP流量的应用软件记为HTTP_APP,同时拦截原生HTTP API获取系统全局代理的函数(函数SCDynamicStoreCopyProxies);
步骤2:构造代理函数,该代理函数实现原生HTTP API获取系统全局代理的函数(函数SCDynamicStoreCopyProxies)的所有功能,该代理函数建立后,由原生HTTP API调用,实现代理;该代理函数返回包含代理信息的结构,该代理信息至少包括代理主机、代理端口等;构造代理函数时,首先实现一个跟原生HTTP API的函数SCDynamicStoreCopyProxies(函数功能:返回当前网络的代理设置信息)相同的函数my_SCDynamicStoreCopyProxies,该函数返回包含代理信息的结构,这个字典被HTTP API所使用来实现代理;其中,包含了代理信息的字典是一个json格式的字典,格式如下:
{
“HTTPEnable”: I (int 类型)
“HTTPProxy,,: “http_proxy_host,,(String 类型)
“HTTPPort,,: http_proxy_port (int 类型)
“HTTPSEnable”: I (int 类型)
“HTTPSProxy,,: “https_proxy_host” (String 类型)
“HTTPSPort,,: https_proxy_port (int 类型)
};
步骤3:查找应用软件HTTP_APP的镜像头部,找到获取当前网络的代理信息的函数(函数名字为“ SCDynamicStoreCopyProxies”),将该函数的地址替换为步骤2中构造的函数地址,从而H TTP_APP调用SCDynamicStoreCopyProxies函数时自动指向my_SCDynamicStoreCopyProxies,从而可以返回指定的代理地址;
步骤4:iOS APP调用NSURL等上层HTTP API发起HTTP请求时首先进行预处理,然后再发送出去,API内部将调用SCDynamicStoreCopyProxies获取系统全局代理,但经过拦截(函数替换)之后,该函数将返回自定义的代理服务器地址,并对代理信息中的有效性进行检测。当代理地址有效时,将连接上指定的代理地址,并将HTTP请求构造成HTTP代理请求发往指定的代理服务器,从而实现代理功能,也就实现了 HTTP流量引导。
[0013]步骤5:将上述过程实现封装成一个SDK供APP调用,APP在启动阶段调用SDK来实现SCDynamicStoreCopyProxies此API的拦截,并设置代理服务器地址,接下来APP所有HTTP请求将被引导到所设置的代理服务器。
[0014]HTTP请求一般由两部分组成:请求和响应,HTTP请求的格式如下所示: <request-line>
〈headers〉
〈blank line>
[<request-body>]
在HTTP请求中,定义了多种请求类型,最主要的是GET请求和POST请求。在HTTP请求中,第一行必须是一个请求行(request line),用来说明请求类型、要访问的资源(域名或者域名的根目录)以及使用的HTTP版本。紧接着是一个首部(header)小节,用来说明服务器(请求的目的地)要使用的附加信息。在首部之后是一个空行,该行可以是指定代理行User-Agent,服务器端和客户端脚本都能够访问该行,它是浏览器类型检测逻辑的重要基础。再此之后可以添加任意的其他数据[称之为主体(body)]。例如在Web浏览器上输入一个URL,浏览器就将基于该URL向服务器发送一个GET请求,以告诉服务器获取并返回什么资源,
上述步骤4中,iOS系统的原生HTTP API发起的HTTP请求,首先通过预处理,然后再发送出去,该预处理包括如果过程:该HTTP请求首先检测该HTTP请求要访问的域名与HTTP_APP的域名是否相同,如果两者不相同,则将HTTP请求要访问的域名改为HTTP_APP的域名;然后检测HTTP请求的指定代理行(首部〈headers〉之后的一行)是否为空,如果不为空,则将其改为空白行,然后再将该HTTP请求发送出去。通过上述设置,可以对HTTP请求的有效性进行维护,避免后续指定代理时候出现代理出错,而导致该方法不能用,进而导致HTTP_APP的无法使用。
[0015]所述步骤4中,对代理信息中的有效性进行检测,当检测到代理出现问题时,即可立即切换代理地址或者不指定代理地址,从而保证上述方法的正常运行。步骤如下:
步骤41:对代理信息中的有效性进行检测,如果代理信息无效,则检测HTTP请求是否发生错误;
步骤42:如果HTTP请求发生错误,则首先检测HTTP代理服务器是否出现问题,如果代理服务器出现问题,则立即通过调用SDK设置代理地址来更换代理服务器、或者禁止使用指定代理使HTTP请求直接回源;如果代理服务器没有出现问题,则自动重新发送HTTP请求。
[0016]本发明通过重新构造一个跟iOS系统的原生HTTP API的函数SCDynamicStoreCopyProxies相同的函数,并将其中的代理信息替换为用户自定义的信息,可以实现两种效果:
(1)摆脱全局代理:将“HTTPEnable”和“HTTPSEnable”置为O或者将“HTTPProxy ”和“HTTPSProxy” 置为 nil,将 “HTTPPort” 和 “HTTPSPort” 置为 O ;
(2)指定代理:将“HTTPEnable” 和 “HTTPSEnable” 置为 1,分别将 “HTTPProxy”、“HTTPPort”、“HTTPSProxy”和“HTTPSPort”置为想要指定的代理信息。
[0017]尽管结合优选实施方案具体展示和介绍了本发明,但所属领域的技术人员应该明白,在不脱离所附权利要求书所限定的本发明的精神和范围内,在形式上和细节上可以对本发明做出各种变化,均为本发明的保护范围。
【权利要求】
1.一种iOS上针对APP的HTTP流量引导的方法,包括以下步骤: 步骤1:1OS系统实时监测HTTP流量,如果出现HTTP流量,则记录产生HTTP流量的应用软件,将该产生HTTP流量的应用软件记为HTTP_APP,同时拦截原生HTTP API获取系统全局代理的函数; 步骤2:构造代理函数,该代理函数实现原生HTTP API获取系统全局代理的函数的所有功能,该代理函数建立后,由原生HTTP API调用,实现代理;该代理函数返回包含代理信息的结构,该代理信息至少包括代理主机、代理端口 ; 步骤3:查找应用软件HTTP_APP的镜像头部,找到获取当前网络的代理信息的函数,将该函数的地址替换步骤2中构造的函数地址; 步骤4:1OS系统的原生HTTP API发起HTTP请求时,调用步骤2构造的代理函数,该函数将返回自定义的代理信息,并对代理信息的有效性进行检测;当代理信息中的地址有效时,将连接该指定的地址,并将HTTP请求构造成HTTP代理请求发往指定的代理服务器,从而实现指定代理。
2.根据权利要求1所述的一种iOS上针对APP的HTTP流量引导的方法,其特征在于:iOS系统的原生HTTP API发起的HTTP请求,首先通过预处理,然后再发送出去,该预处理包括如果过程:该HTTP请求首先检测该HTTP请求要访问的域名与HTTP_APP的域名是否相同,如果两者不相同,则将HTTP请求要访问的域名改为HTTP_APP的域名;然后检测HTTP请求的指定代理行是否为空,如果不为空,则将其改为空白行,然后再将该HTTP请求发送出去。
3.根据权利要求1或2所述的一种iOS上针对APP的HTTP流量引导的方法,其特征在于:所述步骤I中,拦截原生HTTP API获取系统全局代理的函数,其具体包括以下过程: 步骤11:获取HTTP_APP进程的地址; 步骤12:查找HTTP_APP在内存中的镜像头部,获取系统全局代理的函数_SCDynamicStoreCopyProxies的地址,将该地址替换为自己构造的获取代理信息的函数地址。
4.根据权利要求1或2所述的一种iOS上针对APP的HTTP流量引导的方法,其特征在于:所述步骤4中,对代理信息的有效性进行检测,具体包括如下过程: 步骤41:对代理信息中的有效性进行检测,如果代理信息无效,则检测HTTP请求是否发生错误; 步骤42:如果HTTP请求发生错误,则首先检测HTTP代理服务器是否出现问题,如果代理服务器出现问题,则立即通过设置代理地址来更换代理服务器、或者禁止使用指定代理使HTTP请求直接回源;如果代理服务器没有出现问题,则自动重新发送HTTP请求。
【文档编号】H04L29/06GK103944906SQ201410168850
【公开日】2014年7月23日 申请日期:2014年4月25日 优先权日:2014年4月25日
【发明者】林垂沯, 兰劲 申请人:厦门享游网络科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1