自己动手编写一个浏览器
实例目标
在这一章我们使用微软提供的浏览器COM组件来编写一个Internet浏览器。 自己编写浏览器的好处就是可以实现一些扩展功能。在这章中我们将扩展我们的程序实现网站过滤、浏览记录和防止弹出广告窗口的功能。
在本章的后一部分我们将使用HttpWebRequest和HttpWebResponse组件来实现浏览网页源码的功能。最后我们还利用这个组件实现了网上文件的下载、上传等功能。
主要内容
HTTP协议
网页浏览器
定制扩展浏览器功能
WebRequest类
网页源代码浏览
3.1 实例功能
我们首先要浏览器程序。这个实例可以实现简单的浏览器功能如图3-1。在编辑框中输入URL地址然后按GO按钮就可以实现浏览网页的功能如图3-2。
图3-1 浏览器程序 图3-2 浏览器程序效果
在我们的浏览器中您同样可以使用“主页” 、“刷新” 、“前进” 、“后退” 、“停止”按钮完成相应的浏览功能。
接下来我们为自制的浏览器程序添加几个扩展功能。禁止用户访问某些特殊站点如图3-3。
图3-3 禁止用户访问不良网站 图3-4 记录用户访问过的网站
接下来还实现了记录用户访问过的网站及时间这对于比较重要的工作站或公司都是很好用的监督、管理办法。其效果如图3-4。
最后如果你想杜绝弹出式广告窗口如图3-5对你的骚扰可以使用本章实例介绍的第三个扩展办法效果如图3-6。
第三章 浏览器程序 37
图3-5 弹出式广告窗经常骚扰我们 图3-6 免除弹出式广告窗的骚扰
本章的第二个实例是浏览网页的源代码如图3-7。
图3-7 网页源代码浏览程序 图3-8 浏览源代码效果
只要输入网址然后按回车或点击“源码”按钮就可以看到该网页传回来的源代码如图3-8。
3.2 编程思路
如果1995年的时候你掌握了浏览器的编程技术那您无疑是一个网络先锋、编程圣手。然而时至今日 浏览器编程已经算不上有什么技术含量了。编写浏览器的技术从商业机密到代码公开再到现在的组件模块化已经慢慢的从一项科技技术过渡到一项商业产品。我们只需要利用这些“半成品”就可以开发出自己的浏览器。说白了就是给实现浏览功能的核心模块穿上一层外衣并规定了它的一些动作。
那么我们还学习浏览器编程有什么用呢又没有什么技术含量而且现在浏览器到处都能免费下载为什么还要自己去做一个笔者的答案是大大的有必要学习浏览器编程技术。因为在Internet迅速普及的今天浏览器操作无疑已经成为继Windows之后第二个标准化操作平台。可以说现在会上网的人 99%会使用 Internet浏览器这是一个比Windows
更为广泛的操作平台。在这个“协议为王、平台为王” 的世界大家都争先恐后的使自己的产品与主流的平台兼容。 因为这样可以大大节省软件的使用培训费用而且利于软件的迅速推广。例如我们可以开发一套软件您可以标新立异的想出许多方便的用户界面例如点击鼠标右键就可以退出程序。但这并不符合Windows的用户习惯这样不管你的软件有多么方便在推广的时候必然会因为用户习惯问题受到很大的阻力。苹果公司的电脑与Linux主要就是因为这个原因没有得到普及。好在Internet浏览器来了可以打破微软在用户界面上的垄断。浏览器的超链接方式比Windows更为直观、更为方便。说到这里您应该明白使应用程序的操作界面符合浏览器界面方式有什么好处了吧。用户会觉得更亲切、更好用、更好学。
学习浏览器编程的另一个好处就是给你的应用程序添加了一个网络接口。随着Internet日渐普及的今天网络接口已经成为标准商用程序的必备。支持用户访问主页、在线帮助、在线升级已经成为了商业软件的标准组成模块。在程序中嵌入一个浏览器接口无疑使这些功能可以很方便的实现。例如超星图书馆的客户端程序中就提供浏览网页的功能您可以方便的在网络上找到想看的书。而腾讯公司的Tecent浏览器相信更是大名鼎鼎它把所有的IE窗口合并到一个主窗口下使浏览网页更为方便。
那么怎么样才能方便的使自己的应用程序添加浏览功能呢我们并不想费太多的时间弄清楚HTTP协议的实现细节我们只想对浏览器的外观进行一些改动并且对浏览器的行为进行一些设置或限制。显然微软已经注意到程序员们的这一急切的需求所以在Visual C#之中我们可以使用现成的浏览器COM组件然后对这个COM组件进行简单的设定就可以实现网页浏览的功能了。
第三章 浏览器程序 39
利用这个COM组件再结合上我们的需求我们可以因地制宜的拓展浏览器的功能。例如在本章介绍的防止用户进入不良网站的应用之中就是利用了 COM 组件的BeforeNavigate2事件接口。
最后我们再利用.NET平台提供的HttpWebRequest和HttpWebResponse组件实现网页源代码的浏览和网上文件的上传和下载。这两个组件是.NET框架中专门针对HTTP协议的通过它们我们可以方便的处理各种HTTP协议的数据。
3.3 关键技术
3.3.1 HTTP协议
众所周知 Internet的基本协议是TCP/IP协议 目前广泛采用的FTP、Archie Gopher等是建立在TCP/IP协议之上的应用层协议不同的协议对应着不同的应用。
WWW服务器使用的主要协议是H T T P协议即超文体传输协议。由于H TT P协议支持的服务不限于WWW还可以是其它服务因而H T T P协议允许用户在统一的界面下采用不同的协议访问不同的服务如FTP、Archie、 SMTP、 NNTP等。另外HTTP协议还可用于名字服务器和分布式对象管理。
HTTP协议简介
HTTP是一个属于应用层的面向对象的协议由于其简捷、快速的方式适用于分布式超媒体信息系统。它于1990年提出经过几年的使用与发展得到不断地完善和扩展。 目前在WWW中使用的是H T T P/1.0的第六版HT T P/1 .1的规范化工作正在进行之中而且HTTP-NG(NextGeneration of HTTP)的建议已经提出。
HTTP协议的主要特点可概括如下
支持客户/服务器模式。
简单快速客户向服务器请求服务时只需传送请求方法和路径。请求方法常用的有GET、 HEAD、 POST。每种方法规定了客户与服务器联系的类型不同。
由于HTTP协议简单使得HTTP服务器的程序规模小因而通信速度很快。 灵活HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。 无连接无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求并收到客户的应答后即断开连接。采用这种方式可以节省传输时间。
无状态HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息则它必须重传这样可能导致每次连接传送的数据量增大。另一方面在服务器不需要先前信息时它的应答就较快。
HTTP协议的几个重要概念
连接(Connection) 一个传输层的实际环流它是建立在两个相互通讯的应用程序之间。 消息(Message) HTTP通讯的基本单位包括一个结构化的八元组序列并通过连接传输。
请求(Request) 一个从客户端到服务器的请求信息包括应用于资源的方法、资源的标识符和协议的版本号
响应(Response) 一个从服务器返回的信息包括HTTP协议的版本号、请求的状态(例如“成功”或“没找到” )和文档的MIME类型。
资源(Resource) 由URI标识的网络数据对象或服务。
实体(Entity) 数据资源或来自服务资源的回映的一种特殊表示方法它可能被包围在一
第三章 浏览器程序 41
个请求或响应信息中。一个实体包括实体头信息和实体的本身内容。
客户机(Cl ient) 一个为发送请求目的而建立连接的应用程序。
用户代理(User agent) 初始化一个请求的客户机。它们是浏览器、编辑器或其它用户工具。
服务器(Server) 一个接受连接并对请求返回信息的应用程序。
源服务器(Origin server) 是一个给定资源可以在其上驻留或被创建的服务器。 代理(Proxy) 一个中间程序它可以充当一个服务器也可以充当一个客户机为其它客户机建立请求。请求是通过可能的翻译在内部或经过传递到其它的服务器中。一个代理在发送请求信息之前必须解释并且如果可能重写它。
代理经常作为通过防火墙的客户机端的门户代理还可以作为一个帮助应用来通过协议处理没有被用户代理完成的请求。
网关(Gateway) 一个作为其它服务器中间媒介的服务器。与代理不同的是网关接受请求就好象对被请求的资源来说它就是源服务器发出请求的客户机并没有意识到它在同网关打交道。网关经常作为通过防火墙的服务器端的门户网关还可以作为一个协议翻译器以便存取那些存储在非HTTP系统中的资源。
通道(Tunnel) 是作为两个连接中继的中介程序。一旦激活通道便被认为不属于HTTP通讯尽管通道可能是被一个HTTP请求初始化的。当被中继的连接两端关闭时通道便消失。 当一个门户(Portal)必须存在或中介(Intermediary)不能解释中继的通讯时通道被经常使用。
缓存(Cache) 反应信息的局域存储。
HTTP协议的运作方式
HTTP协议是基于请求响应范式的。一个客户机与服务器建立连接后发送一个请求给服务器请求方式的格式为统一资源标识符、协议版本号后边是MIME信息包括请求修饰符、客户机信息和可能的内容。服务器接到请求后给予相应的响应信息其格式为一个状态行包括信息的协议版本号、一个成功或错误的代码后边是MIME信息包括服务器信息、实体信息和可能的内容。
许多HTTP通讯是由一个用户代理初始化的并且包括一个申请在源服务器上资源的请求。最简单的情况可能是在用户代理(UA)和源服务器(O)之间通过一个单独的连接来完成。如图3-8。
请求链
Computer Computer2
图3-8 H TT P的请求响应方式
当一个或多个中介出现在请求响应链中时情况就变得复杂一些。 中介由三种代理(Proxy)、 网关(Gateway)和通道(Tunnel)。一个代理根据URI的绝对格式来接受请求重写全部或部分消息通过URI的标识把已格式化过的请求发送到服务器。网关是一个接收代理作为一些其它服务器的上层并且如果必须的话可以把请求翻译给下层的服务器协议。一个通道作为不改变消息的两个连接之间的中继点。当通讯需要通过一个中介(例如防火墙等)或者是中介不能识别消息的内容时通道经常被使用。
第三章 浏览器程序 43
Computer1 Computer2 Computer3 Computer4
图3-9 H TT P协议请求响应链
上面的图3-9表明了在用户代理(UA)和源服务器(O)之间有三个中介(A,B和C)。一个通过整个链的请求或响应消息必须经过四个连接段。这个区别是重要的因为一些HTTP通讯选择可能应用于最近的连接、没有通道的邻居应用于链的终点或应用于沿链的所有连接。尽管图2-2是线性的每个参与者都可能从事多重的、并发的通讯。例如B可能从许多客户机接收请求而不通过A并且不通过C把请求送到A在同时它还可能处理A的请求。
任何针对不作为通道的汇聚可能为处理请求启用一个内部缓存。缓存的效果是请求响应链被缩短条件是沿链的参与者之一具有一个缓存的响应作用于那个请求。图3-10说明结果链其条件是针对一个未被UA或A加缓存的请求B有一个经过C来自O的一个前期响应的缓存拷贝。
请求链
Computer1 Computer2 Computer3 Computer4
图3-10 结果链
在Internet上HTTP通讯通常发生在TCP/IP连接之上。缺省端口是TCP 80 但其它
弘速云元旦活动本公司所销售的弹性云服务器、虚拟专用服务器(VPS)、虚拟主机等涉及网站接入服务的云产品由具备相关资质的第三方合作服务商提供官方网站:https://www.hosuyun.com公司名:弘速科技有限公司香港沙田直营机房采用CTGNET高速回国线路弹性款8折起优惠码:hosu1-1 测试ip:69.165.77.50地区CPU内存硬盘带宽价格购买地址香港沙田2-8核1-16G20-...
速云怎么样?速云是一家国人商家。速云商家主要提供广州移动、深圳移动、广州茂名联通、香港HKT等VDS和独立服务器。目前,速云推出深圳独服优惠活动,机房为深圳移动机房,购买深圳服务器可享受5折优惠,目前独立服务器还支持申请免费试用,需要提交工单开通免费体验试用,次月可享受永久8折优惠,也是需工单申请哦!点击进入:速云官方网站地址活动期限至 2021年7月22日速云云服务器优惠活动:活动1:新购首月可...
今天有网友提到自己在Linux服务器中安装VNC桌面的时候安装都没有问题,但是在登录远程的时候居然有出现灰色界面,有三行代码提示"Accept clipboard from viewers,Send clipboard to viewers,Send primary selection to viewers"。即便我们重新登录也不行,这个到底如何解决呢?这里找几个可以解决的可能办法,我们多多尝试。...