淘客熙熙

主题:请大家帮忙参考一下:这样的跨平台客户软件如何实现? -- kingcu

共:💬41 🌺7 新:
全看分页树展 · 主题
家园 请大家帮忙参考一下:这样的跨平台客户软件如何实现?

准备开发的一个客户端软件,要求要跨平台,还要能够截获用户浏览器发出的http请求。具体要求如下,跨平台:要求能够在所有主流操作系统上运行,Windows 2000/XP/Vista/7,Mac OS X和Linux;截获浏览器的http请求:每当用户打开一个网页的时候,要求截获这个http请求,并记录其url,还要求支持所有的主流浏览器:FireFox, IE, Chrome, Opera, Safari。

做了几个初步设计,请大家帮着参考一下,如果您有更好的方案,还请不吝赐教。

方案一

用Abobe AIR作为用户界面的平台,AIR runtime现在可以支持上面的三种系统,可以解决跨平台的要求。但是AIR没有什么系统级编程能力,所以无法直接截获HTTP Request。但是AIR可以进行文件操作,而浏览器的历史文件(history file)里存有访问过的url,所以可以通过读取这个history file,得到url。但是这个设计有太多的脆弱环节,AIR无法确切的知道系统上装了那些浏览器,浏览器的history不一定总是存在特定的位置,用户访问过的url也不一定总是会写入history,等等。而且,读取history的操作也会很复杂,因为不光每一种浏览器的history文件的格式不一样,就连同一种浏览器的不同版本之间都不一样,例如FireFox,3.0之前的版本用的是Mork文件格式,3.0开始用SQLite,但是3.0和3.5的SQLite Database Schema也不一样。

方案二

把客户端分成两个部分,一部分是AIR做的用户界面,另一部分是系统级编程(native system programming)实现的http截获。但是程序分成两个部分,增加了复杂性,也降低了系统的可靠性。

方案三

用Qt来实现客户端,由于是C++,而且Qt比AIR有多得多的系统编程支持,可以不需要把客户端分成两部分。

这个程序的关键在于如何截获http request,我现在没有任何具体的实现或是直接的资料,只知道几个大概的方向:在Windows下,可以用Winsock LSP(Layered Service Provider)实现;或者是写一个HTTP Proxy Server,然后让用户的所有浏览器都指向这个proxy。

全看分页树展 · 主题


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河