首页> 中国专利> Android系统浏览器设置私有代理服务器的方法

Android系统浏览器设置私有代理服务器的方法

摘要

本发明公开一种Android系统浏览器设置私有代理服务器的方法,所述方法包括:A、接收用户的操作指令预先在浏览器中设置浏览器的私有代理服务器的主机地址和端口,并将其保存到系统数据库里的数据库表中;B、当浏览器执行网页浏览或下载任务时发出Http请求,查找所述数据库表,从所述数据库表中直接读取私有代理服务器主机地址和端口,通过私有代理服务器的主机地址和端口发送所述Http请求。本发明为浏览器设置私有代理服务器并不影响系统本身的公共代理服务器设置,通过为浏览器设置私有代理服务器,使得手机浏览器具有突破自身IP访问限制,访问内部资源或隐藏IP的功能,访问速度也大大提高,提升了用户的产品体验。

著录项

  • 公开/公告号CN103607454A

    专利类型发明专利

  • 公开/公告日2014-02-26

    原文格式PDF

  • 申请/专利权人 TCL通讯(宁波)有限公司;

    申请/专利号CN201310583742.7

  • 发明设计人 何小婷;汤立正;

    申请日2013-11-20

  • 分类号H04L29/08;H04L29/06;

  • 代理机构深圳市君胜知识产权代理事务所;

  • 代理人王永文

  • 地址 315100 浙江省宁波市高新区扬帆路999弄5号6楼

  • 入库时间 2024-02-19 22:36:00

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2017-03-08

    授权

    授权

  • 2014-04-23

    实质审查的生效 IPC(主分类):H04L29/08 申请日:20131120

    实质审查的生效

  • 2014-02-26

    公开

    公开

说明书

技术领域

本发明涉及移动通信技术领域,尤其涉及一种Android系统浏览器设置私有代理服务器的方法。 

背景技术

代理服务器(Proxy Server)的功能就是代理网络用户去取得网络信息,它是网络信息的中转站。 在一般情况下,我们使用网络浏览器直接去连接其他Internet站点取得网络信息时,须送出Request请求信号来得到回答,然后对方再把信息传送回来。代理服务器是介于浏览器和Web服务器之间的一台服务器,有了它之后,浏览器不是直接到Web服务器去取回网页而是向代理服务器发出请求,Request信号会先送到代理服务器,由代理服务器来取回浏览器所需要的信息并传送给你的浏览器。 

代理服务器主要的功能有: 

1).突破自身IP访问限制。教育网、过去的169网等网络用户可以通过代理访问国外网站。 

2).访问一些单位或团体内部资源,如使用教育网内地址段免费代理服务器,就可以用于对教育网开放的各类FTP下载上传,以及各类资料查询共享等服务。 

3).提高访问速度:通常代理服务器都设置一个较大的硬盘缓冲区,当有外界的信息通过时,同时也将其保存到缓冲区中,当其他用户再访问相同的信息时, 则直接由缓冲区中取出信息,传给用户,以提高访问速度。 

4).隐藏真实IP:上网者也可以通过这种方法隐藏自己的IP,免受攻击。 

Android是谷歌推出的一种智能的移动终端操作系统。该系统里只有APN(访问接入点)设置里才可以设置公共代理服务器(proxy server)的主机地址(proxy host)和端口(proxy port), 并且将数据保存在系统数据库: /data/data/com.android.providers.settings/databases/settings.db 的表secure里。 该公共代理服务器的值应用于Android手机上的所有浏览器。但目前还未出现为浏览器单独设置私有代理服务器的技术方案。 

因此,现有技术还有待于改进和发展。 

发明内容

鉴于上述现有技术的不足,本发明的目的在于提供一种Android系统浏览器设置私有代理服务器的方法,旨在解决目前智能电视遥控器按键复杂,不易操作的问题。 

本发明的技术方案如下: 

一种Android系统浏览器设置私有代理服务器的方法,其中,所述方法包括以下步骤:

A、接收用户的操作指令预先在浏览器中设置浏览器的私有代理服务器的主机地址和端口,并将所输入的私有代理服务器的主机地址和端口保存到系统数据库里的数据库表中;

B、当浏览器执行网页浏览或下载任务时发出Http请求,自动查找所述数据库表,从所述数据库表中直接读取私有代理服务器主机地址和端口,通过私有代理服务器的主机地址和端口发送所述Http请求。

所述的Android系统浏览器设置私有代理服务器的方法,其中,所述步骤A还包括:将所述私有代理服务器的主机地址和端口的键值定义在Setting.java文件中。 

所述的Android系统浏览器设置私有代理服务器的方法,其中,当所述Android系统为Android 2.3及之前的版本系统时,所述步骤B具体包括: 

浏览器执行网页浏览任务时,从所述数据库表中直接成功读取私有代理服务器,将发送Http请求的Http模块中的请求队列对象的成员对象代理服务器设置为私有代理服务器,通过该私有代理服务器发送所述Http请求。

所述的Android系统浏览器设置私有代理服务器的方法,其中,当从所述数据库表中对私有代理服务器读取失败,则从所述数据库表中读取公有代理服务器,设置为请求队列对象的成员对象,通过所述公有代理服务器发送所述Http请求。 

所述的Android系统浏览器设置私有代理服务器的方法,其中,当所述Android系统为Android 2.3及之前的版本系统时,所述步骤B具体包括: 

浏览器执行浏览apple-touch-icon类型的图片资源任务时,后台线程创建AndroidHttpClient客户对象及HttpGet请求对象,从所述数据库表中直接读取私有代理服务器并赋值给AndroidHttpClient客户对象,AndroidHttpClient客户对象发送HttpGet请求。

所述的Android系统浏览器设置私有代理服务器的方法,其中,当所述Android系统为Android 2.3及之前的版本系统时,所述步骤B具体包括: 

浏览器执行执行下载任务时,若对所要下载文件的mimetype文件类型未知,则后台线程创建AndroidHttpClient客户对象及HttpHead请求对象,从所述数据库表中直接读取私有代理服务器并赋值给AndroidHttpClient客户对象,AndroidHttpClient客户对象发送HttpHead请求。

所述的Android系统浏览器设置私有代理服务器的方法,其中,当所述Android系统为Android 2.3及之前的版本系统时,所述步骤B具体包括: 

浏览器执行执行下载任务时,后台线程创建AndroidHttpClient客户对象及HttpGet请求对象,从所述数据库表中直接读取私有代理服务器并赋值给AndroidHttpClient客户对象,AndroidHttpClient客户对象发送HttpGet请求。

所述的Android系统浏览器设置私有代理服务器的方法,其中,当所述Android系统为Android 4.0及以上的版本系统时,所述步骤B具体为: 

浏览器执行网页浏览或下载任务时发出Http请求,从webkit模块中读取并设置所述私有代理服务器并传递给chromium C库,所述Http请求通过设置的私有代理服务器发出。

所述的Android系统浏览器设置私有代理服务器的方法,其中,所述从webkit模块中读取并设置所述私有代理服务器并传递给chromium C库具体为:从webkit模块的代理服务器广播接受器接受的广播中取出代理服务器,并发送给接口函数,接口函数读取私有代理服务器的主机地址与端口号,调用本地函数将数据传递到底层的webkit C库,进而将数据传递给底层chromium C库。 

有益效果:本发明提供一种Android系统浏览器设置私有代理服务器的方法,该私有代理服务器的设置并不影响系统本身的公共代理服务器设置,通过为浏览器设置私有代理服务器,使得Android系统手机浏览器具有突破自身IP访问限制,访问内部资源或隐藏IP的功能,访问速度也大大提高,提升了用户的产品体验。 

附图说明

图1为本发明的Android系统浏览器设置私有代理服务器的方法流程图。 

图2为本发明浏览器浏览网页时通过私有代理服务器获得网页及网页里其它资源的方法流程图。 

图3为本发明网页内资源为apple-touch-icon类型的图片时,浏览器通过私有代理服务器来发送HttpGet请求来获得图片的方法流程图。 

图4为浏览器启动下载任务通过私有代理服务器发送HttpHead请求获得下载文件的mimetype文件类型的方法流程图。 

图5为浏览器启动下载任务通过私有代理服务器发送HttpGet请求执行下载任务的方法流程图。 

具体实施方式

本发明提供一种Android系统浏览器设置私有代理服务器的方法,为使本发明的目的、技术方案及效果更加清楚、明确,以下对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。 

如图1所示的一种Android系统浏览器设置私有代理服务器的方法,其中,所述方法包括以下步骤: 

S100、接收用户的操作指令预先在浏览器中设置浏览器的私有代理服务器的主机地址和端口,并将所输入的私有代理服务器的主机地址和端口保存到系统数据库里的数据库表中。

其中,将所输入的私有代理服务器的主机地址和端口保存到系统数据库里的数据库表中后还要将所述私有代理服务器的主机地址和端口的键值定义在Setting.java文件中。具体定义在文件: 

“frameworks/base/core/java/android/provider/Settings.java”中:

public static final String PRIVATE_HTTP_PROXY_HOST = "private_http_proxy_host";

public static final String PRIVATE _HTTP_PROXY_PORT = "private_http_proxy_port";

S200、当浏览器执行网页浏览或下载任务时发出Http请求,自动查找所述数据库表,从所述数据库表中直接读取私有代理服务器主机地址和端口,通过私有代理服务器的主机地址和端口发送所述Http请求。

在Android2.3及之前版本的Browser浏览器发送的Http请求都是在上层的Java代码里实现的,这与Android4.0以上版本的系统的发送请求过程完全不同。因此,本发明分开讨论其实现过程。 

当所述Android系统为Android 2.3及之前的版本系统时,分析Android2.3的浏览器的源码,可知浏览器在四种不同的情况下会发出Http请求, 这四种不同的情况分别是: 

1). 普通请求web网页及网页内的资源时会在Android系统的中间层frameworks/base发出Http请求。

2). 当网页内的资源为apple-touch-icon类型的图片时,Browser应用程序的DownloadTouchIcon对象会在后台运行线程, 创建并发送HttpGet请求来获得图片。 

3). 当在Browser浏览器启动下载任务时,如果不知道下载文件的mimetype文件类型,需要先调用FetchUrlMimeType对象在后台发送HttpHead请求获得下载文件的mimetype文件类型,然后再执行下载任务。  

4). 当在Browser浏览器启动下载任务后,会将该任务插入数据库“/data/data/com.android.providers.downloads/databases/downloads.db”的表downloads中,然后DownloadProvider应用模块的DownloadService会从表中读出该下载任务并启动下载线程DownloadThread去执行该下载任务。即在下载线程DownloadThread中会创建并发送HttpGet请求。

针对以上四种情况,分别通过四种设置方法进行私有代理服务器的设置。 

针对浏览器上述第一种情况,如何实现浏览器浏览网页时通过私有代理服务器获得网页及网页里包含的其它资源(如图片,css等文件资源)。此时所述步骤S200具体为: 

浏览器执行网页浏览任务时,从所述数据库表中直接成功读取私有代理服务器,将发送Http请求的Http模块中的请求队列对象的成员对象代理服务器设置为私有代理服务器,通过该私有代理服务器发送所述Http请求。     

当从所述数据库表中对私有代理服务器读取失败,则从所述数据库表中读取公有代理服务器,设置为请求队列对象的成员对象,通过所述公有代理服务器发送所述Http请求。

 浏览器浏览网页时的Http请求是由Android系统的framework中间层的Http模块发送的。详细流程如下: 

1. Http模块包含一RequestQueue请求队列对象,该对象包含一成员对象: HttpHost(代理服务器)对象。当用户切换到浏览器网页浏览界面时,会调用RequestQueue对象的enablePlatformNotifications()数设置HttpHost对象。 即从数据库表secure中读出系统公有的代理服务器赋值给HttpHost对象。

2. Android系统在其它地方更改proxy(比如修改APN设置),会发送事件广播:PROXY_CHANGE_ACTION(Proxy代理服务器更改事件)。 RequestQueue对象接受该事件的处理同样是重新设置Proxy代理服务器。 

3. 当用户在浏览器浏览网页时,会发送命令到中间层的webkit模块. webkit模块的network对象会创建Http request请求,并将请求放入Http模块的RequestQueue请求队列中, 同时将RequestQueue对象的成员对象HttpHost作为代理服务器赋值给该Http request请求。 

4. Http模块的网络链接线程ConnectionThread从RequestQueue对象中读取Http request请求并发送。 

根据以上流程可知,只要将RequestQueue请求队列对象的成员对象HttpHost设置为私有的代理服务器,浏览器浏览网页时就会通过私有代理服务器上网。所以上述步骤S200的具体实现流程如图2所示,步骤如下: 

101.当用户切换到浏览器网页浏览界面时,会调用函数enablePlatformNotifications()通知中间层的webkit模块更改proxy。

102.webkit模块调用RequestQueue请求队列对象的函数enablePlatformNotifications()通知中间层的Http模块更改proxy。 

103. RequestQueue对象从数据库表secure通过在文件Settings.java中定义的键值读取私有代理服务器的的主机地址和端口。 

104.如果读取成功, 将requestQueue请求队列对象的成员对象HttpHost设置为该私有代理服务器。 

105.如果读取失败按系统原有的处理流程从数据库表secure读出公有代理服务器并设置为HttpHost成员对象。 

在Android2.3系统中原本的流程是直接将公有代理服务器设置为请求队列对象的成员对象。而本发明主要通过添加步骤103及步骤104将请求队列对象的成员对象代理服务器设置为私有代理服务器。从而实现在这种情况下的Http请求通过私有代理服务器发送出去。 

针对第二种情况,即当网页内的资源为apple-touch-icon类型的图片时,如何实现浏览器应用程序的DownloadTouchIcon对象在后台运行线程, 创建并通过私有代理服务器来发送HttpGet请求来获得图片。此时所述步骤S200具体为: 

浏览器执行浏览apple-touch-icon类型的图片资源任务时,后台线程创建AndroidHttpClient客户对象及HttpGet请求对象,从所述数据库表中直接读取私有代理服务器并赋值给AndroidHttpClient客户对象,AndroidHttpClient客户对象发送HttpGet请求。

上述步骤的具体实现流程如图3所示,步骤如下: 

201. Android中间层的webkit模块将从服务器获得的网页数据发送给底层webkit C库。

202. webkit C库分析网页中包含apple-touch-icon类型的图片,则回调中间层的webkit模块的BrowserFrame.didReceiveTouchIconUrl()函数。 

203. webkit模块发送RECEIVED_TOUCH_ICON_URL消息,通知浏览器应用程序下载apple-touch-icon类型的图片文件。 

204. 浏览器应用程序的DownloadTouchIcon对象运行后台线程来实现下载。

205. DownloadTouchIcon后台线程创建AndroidHttpClient客户对象及HttpGet请求对象。 

206. 从系统secure数据库表中读出私有代理服务器并赋值给AndroidHttpClient客户对象。 

207. AndroidHttpClient客户对象发送HttpGet请求对象。 

在Android2.3系统中原本的流程是不设置代理服务器直接发送HttpGet请求。而本发明主要通过添加步骤206设置私有代理服务器,从而实现在这种情况下的Http请求通过私有代理服务器发送出去。 

针对第三种情况,即在浏览器启动下载任务时,会先调用FetchUrlMimeType对象在后台发送HttpHead请求获得下载文件的mimetype文件类型。此时所述步骤S200具体为: 

浏览器执行执行下载任务时,若对所要下载文件的mimetype文件类型未知,则后台线程创建AndroidHttpClient客户对象及HttpHead请求对象,从所述数据库表中直接读取私有代理服务器并赋值给AndroidHttpClient客户对象,AndroidHttpClient客户对象发送HttpHead请求。

具体实现流程如图4所示 

301.浏览器调用函数onDownloadStartNoStream()启动下载任务。302. FetchUrlMimeType对象运行后台线程来获得文件的mimetype类型。

303. 后台线程创建AndroidHttpClient客户对象及HttpHead请求对象。 

304. 从secure数据库表中读出私有proxy并赋值给AndroidHttpClient客户对象。 

305. AndroidHttpClient客户对象发送HttpHead请求对象。 

针对第四种情况,即浏览器启动下载任务后,DownloadProvider应用模块的DownloadService会启动下载线程DownloadThread创建并发送HttpGet请求,执行该下载任务。此时步骤S200具体为: 

浏览器执行执行下载任务时,后台线程创建AndroidHttpClient客户对象及HttpGet请求对象,从所述数据库表中直接读取私有代理服务器并赋值给AndroidHttpClient客户对象,AndroidHttpClient客户对象发送HttpGet请求。

具体实现流程如图5所示 

401. Browser浏览器启动下载任务,

402. 将该任务插入数据库“/data/data/com.android.providers.downloads/

databases/downloads.db”的表downloads中。

403. DownloadProvider应用模块的DownloadService会从表中读出该下载任务并启动下载线程DownloadThread。 

404. 下载线程DownloadThread创建AndroidHttpClient客户对象及HttpGet请求对象。 

405. 从secure数据库表中读出私有代理服务器并赋值给AndroidHttpClient客户对象。 

406. AndroidHttpClient客户对象发送HttpGet请求对象。 

在Android2.3系统中原本的流程是不设置代理服务器直接发送HttpGet请求下载网络资源。而本发明主要通过添加步骤405设置私有代理服务器,从而实现将下载网络资源的Http请求通过私有代理服务器发送出去。 

当所述Android系统为Android 4.0及以上的版本系统时,所述步骤S200具体为: 

浏览器执行网页浏览或下载任务时发出Http请求,从webkit模块中读取并设置所述私有代理服务器并传递给chromium C库,所述Http请求通过设置的私有代理服务器发出。

其中,所述从webkit模块中读取并设置所述私有代理服务器并传递给chromium C库具体为:从webkit模块的代理服务器广播接受器接受的广播中取出代理服务器,并发送给接口函数,接口函数读取私有代理服务器的主机地址与端口号,调用本地函数将数据传递到底层的webkit C库,进而将数据传递给底层chromium C库。 

Android4.0以上版本的浏览器的Http请求的发送都是在底层chromium C库里实现的。而代理服务器则是在中间层的webkit模块被设置。系统将在Webkit模块设置的代理服务器传递给chromium库。其实现流程如下: 

1. 当用户切换到Browser浏览器网页浏览界面时,会调用函数enablePlatformNotifications()通知中间层的webkit模块注册更改代理服务器的广播接受器。

2.系统的代理服务器发生改变时,会发出PROXY_CHANGE_ACTION广播。webkit模块的代理服务器广播接受器接受到该广播后,从广播中取出代理服务器,通过PROXY_CHANGED消息发送给WebViewCore对象。 

3.WebViewCore对象的消息处理是调用底层的接口对象JWebCoreJavaBridge对象的接口函数updateProxy()。 

4.接口函数updateProxy()从消息中取出代理服务器的主机地址与端口号,调用本地函数nativeUpdateProxy(), 该本地函数将数据传递到底层的webkit C库,webkit C库再会将数据传递给底层chromium C库。 

根据以上流程可知,本发明只需在第4步的接口函数updateProxy()调用本地函数设置公共代理服务器时,将其功能更改为读取并设置私有代理服务器,该私有代理服务器就会传递给chromium库,这样Browser浏览器的Http请求都会通过设置的私有代理服务器发送给网络。 

本发明提供一种Android系统浏览器设置私有代理服务器的方法,该私有代理服务器的设置并不影响系统本身的公共代理服务器设置,通过为浏览器设置私有代理服务器,使得Android系统手机浏览器具有突破自身IP访问限制,访问内部资源或隐藏IP的功能,访问速度也大大提高,提升了用户的产品体验。 

应当理解的是,本发明的应用不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。 

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号