《http客户端wininet精品教程》由会员分享,可在线阅读,更多相关《http客户端wininet精品教程(47页珍藏版)》请在金锄头文库上搜索。
1、2.9 HTTP应用,2.9.1 HTTP应用开发的分类 HTTP客户 HTTP服务器 服务器端应用程序 2.9.2 HTTP应用开发方法 使用Socket编程接口 使用动态链接库或ActiveX控件,本讲内容,2.9.3 使用控件开发HTTP客户端应用 Internet Transfer控件属性 Internet Transfer控件方法 Internet Transfer控件事件 2.9.4 使用WinInet开发HTTP客户端应用 示例 主要实现步骤,2.9.1 HTTP应用开发的分类,1.1 HTTP客户程序 HTTP协议作为Web的技术组件之一为Web的成功奠定了重要的基础它提供了客
2、户和服务器进行交互的机制并对交互的语法和语义制定了统一的标准 Web上很多应用的开发都与HTTP协议有着关联或者围绕着HTTP协议展开或者需要HTTP协议的支持 可以说HTTP协议贯穿了Web上多个层次的应用开发如图所示 从该图中可以看出HTTP应用可以分为三种类型HTTP客户程序,2.9.1 HTTP应用开发的分类(续), HTTP客户程序 HTTP客户程序可以看作是一种用户代理agent ,它的作用是代表用户和Web服务器进行交互,以实现下载文档提交信息等目的。 一些典型的HTTP客户程序包括 Web浏览器:其用途主要是供用户浏览Web服务器上的HTML文档。例如Netscape Navi
3、gator Microsoft IE等 Web文档下载工具:其用途主要是采用断点续传多线程等手段帮助用户快速地从Web服务器上下载资源。例如NetAntsNet Vampire等 Web Robot: 其用途主要是出于信息检索等目的而对Web遍历,即从某个URL开始沿着Web上的超链采用深度优先或广度优先的方法来下载所有的Web页面。例如Altavista等搜索引擎中均使用了这种程序,2.9.1 HTTP应用开发的分类(续),HTTP客户程序的基本功能 虽然上述各个HTTP客户程序的作用和实现方法各不相同,但至少都具备以下两项基本功能: 与用户的交互 - 提供人机交互的手段可视化界面或者命令行
4、方式供用户来表达其要求,同时将执行的结果展现给用户。 - 对于最终用户而言,要求他们掌握HTTP中的各种消息的语法和语义是不现实的,因此人机交互要尽可能地简单直观。例如在Web浏览器中,用户仅给出要浏览的Web页面的地址就可以看到该页面,至于使用HTTP协议来实现这一目的细节对用户是透明的,这些工作应该由HTTP客户程序代替用户完成。,2.9.1 HTTP应用开发的分类(续), 与服务器的交互 - 根据用户提出的要求按照HTTP协议规范和服务器进行交互,以完成用户的要求 - 处理如何和服务器建立连接,使用何种语法格式来发送请求消息、如何解释服务器的响应消息等问题。这一切都要遵循HTTP协议中给
5、出的规定 可以看出,一个HTTP客户程序实际上是HTTP协议内容的部分实现。因此要能够开发HTTP客户程序就应该透彻地理解HTTP协议中给出的客户和服务器的交互机制,正确地掌握各种消息的语法和语义规范 需要说明的是除了要实现上述基本功能以外HTTP客户程序可能还要具备一些与HTTP协议本身无关的功能例如一个Web浏览器 除了能够根据用户的要求将指定的Web页面下载下来,还要能够按照HTML规范对该页面进行解析,并在可视化的界面上将其展现出来,2.9.1 HTTP应用开发的分类(续),下面我们以Web浏览器为例对HTTP客户程序的内部结构进行粗略的分析,2.9.1 HTTP应用开发的分类(续),
6、该Web浏览器由以下几个部分组成: 用户接口:接收用户的输入,并将服务器返回的响应展示给用户。 用户输入解析器:对用户输入进行解析,并将结果传送给控制器。 控制部分:是Web浏览器的核心部分,负责协调各个部件的运作。 HTTP客户:如果用户的输入是要求访问HTTP服务器,那么就将其以HTTP请求消息的形式提交给服务器,并接收和解析服务器的响应。 其它客户用户:可能还会访问Internet上的FTP等服务,因此需要有基于相应协议的客户部分,例如FTP客户。 HTML解析器:如果服务器返回的消息中包含HTML文件,那么对其按照HTML语法进行解析。 其它解析器:如果HTML文件中包含脚本语言等成分
7、,例如VBScript, 那么对其按照相应的规范进行解析,在后面的章节中我们将对VBScript进行详细讨论。 格式化显示:将解析结果输出到可视化界面上供用户浏览。,2.9.1 HTTP应用开发的分类(续),1.2 HTTP服务器程序 HTTP服务器 HTTP服务器程序的作用是为用户提供服务。例如返回用户想浏览的文档等,为了实现这一目标,HTTP服务器程序必须按照HTTP协议规范和客户进行交互。 如何和客户建立连接 如何解释客户的请求消息 如何按照用户的要求执行相应的处理 使用何种语法格式来将处理结果作为响应消息返回给客户 一个HTTP服务器程序实际上也是HTTP协议内容的部分实现,因此 要能
8、够开发HTTP服务器程序也应该透彻地理解HTTP协议中给出的客户 和服务器交互机制,正确地掌握各种消息的语法和语义规范。,2.9.1 HTTP应用开发的分类(续),需要说明的是除了要实现上述基本功能以外,HTTP服务器程序还要具备其它的一些功能: 能够将客户提交的信息传递给CGI程序或ASP脚本等服务器端应用程序 接收服务器端应用程序的输出结果等 这些功能的实现又依赖于服务器与服务器端应用程序的接口规范,例如CGI、 ISAPI等。如图所示:,2.9.1 HTTP应用开发的分类(续),2.9.1 HTTP应用开发的分类(续), HTTP Proxy 作为HTTP客户和服务器之间的中介,Prox
9、y等系统也是一种基于HTTP的应用程序 从HTTP客户的角度来看,Proxy能够接收客户提出的请求,并向客户返回响应,因此Proxy可以看作是客户应用程序的服务器。 从HTTP服务器的角度来看,Proxy能够向服务器提出请求,并接收服务器返回的响应,因此Proxy可以看作是服务器应用程序的客户。 在开发HTTP代理时,要同时实现HTTP协议对客户和服务器的要求,并加入一些额外的中间处理,例如代理的访问认证、日志与计费、缓存控制等。,2.9.1 HTTP应用开发的分类(续),2.9.1 HTTP应用开发的分类(续),服务器端应用程序的开发者最好能够理解HTTP客户和服务器的交互机制,掌握一些HT
10、TP消息的语法和语义, 需要说明的是除了要实现上述基本功能以外,HTTP服务器程序还要具备其它的一些功能,例如 能够根据用户提交的信息对数据库服务器进行访问 访问Email等其它Internet服务 这些功能的实现又依赖于其它的一些规范例如ODBC (OpenDataBase Connection)、 POP3( PostOffice Protocol version 3)和SMTP (Simple Messaging Transport Protocol) 等,有关这些规范的内容不属于本课程的范畴,感兴趣的可以参见相关资料。,2.9.2 HTTP应用开发方法与示例,在上面介绍的三种HTTP应
11、用中,HTTP客户和HTTP服务器与HTTP协 议密切相关。 下面我们对这两种应用的开发方法进行介绍,关于服务器端应用程 序的开发,我们将在后续对CGI 和ASP 部分进行介绍。 应用程序通常建立在系统提供的应用编程接口API( Application Programming Interface) 之上HTTP应用程序的开发也不例外。 按照所使用API抽象层次的不同,我们将其分为两种: 一种使用的是网络层的应用编程接口,例如Windows和Unix平台 上的Socket API等。 另一种使用的是应用层上的编程接口,例如Windows平台上提供 的WinInet DLL和Internet Tr
12、ansfer Control等。,2.9.2 HTTP应用开发方法与示例(续),2.9.2 HTTP应用开发方法与示例(续),2.1 使用Socket编程接口 Socket接口是TCP/IP网络最为通用的API之一,它提供了很多函数和例程供我们来开发TCP/IP网络上的应用程序。 此处我们不对Socket编程的细节进行介绍,仅给出了使用Socket接口来实现HTTP客户和服务器的一般方法,如图所示。 在该图中所有的Socket函数用英文标出,而对HTTP消息的处理用中文标出。,2.9.2 HTTP应用开发方法与示例(续),2.9.2 HTTP应用开发方法与示例(续), HTTP服务器应用程序的
13、开发 首先,使用Socket( )来生成一个Socket ,并通过bind( )将该Socket绑定到HTTP端口 然后使用listen( )来侦听客户的连接请求 当客户的连接请求到达后,使用accept( )来和客户建立连接 接着使用read( )来读取客户发来的请求消息 当收到请求消息后,就要按照HTTP协议对消息进行解析 根据客户的请求执行相应的处理程序,例如读取指定的HTML文件 之后服务器将执行结果封装为符合HTTP协议的响应消息 使用write( )将响应消息发送给客户 这样,一次HTTP交互结束。服务器又可以为另一个客户请求服务了,2 HTTP应用开发方法与示例, 在HTTP客户
14、应用程序的开发 当用户提出某个要求时,客户程序首先将用户的要求封装为符合HTTP协议规定的请求消息 然后,使用Socket( )来生成一个Socket, 并通过connect( )来请求和服务器建立连接 在成功地建立连接后,客户使用wrtie( )将请求消息发送给服务器 在服务器返回响应后,客户使用read( )来读取服务器的响应消息,并按照HTTP协议对消息进行解析,例如从消息实体中提取出用户所需要浏览的文件 之后,将服务器的响应展现给用户 这样,客户便完成了用户所提出的一个要求,2 HTTP应用开发方法与示例, Socket API的优缺点 优点 在使用Socket API这种网络编程接口
15、来开发HTTP应用程序时,开发者可以深入到应用的底层,能够直接控制HTTP和TCP/IP上细节,从而便于实现一些高级的特性 缺点 它对开发者的要求比较高,开发者必须要透彻地理解HTTP协议,同时要熟悉TCP/IP网络和Socket编程 此外开发过程也比较复杂,开发者必须处理许多细节问题:例如数据包的封装与解析、网络字节序的转换、收发缓冲区的开辟与释放等等,2.9.2 HTTP应用开发方法与示例(续),2.2 使用动态链接库或者ActiveX控件 为了适应快速开发Internet应用程序的要求,我们可以使用一些现成的动态链接库或者ActiveX控件。例如Microsoft提供的WinInet D
16、LL和Internet Transfer Control等。 这些函数库和控件本身已经实现了HTTP客户的功能,并将其通过API提供出来供开发者调用。 这样,我们在开发应用程序时就不需要涉及到Socket和HTTP的细节就可以方便地使用HTTP等服务,从而加快了应用开发的速度 严格地说,此时我们开发的不并是HTTP客户本身,而是一个HTTP客户的外包装程序,与HTTP真正密切相关的部分已经在函数库或控件的内部完成了,2.9.3 使用控件开发HTTP客户端应用,下面,我们介绍如何使用Internet Transfer控件来开发HTTP客户端应用,在此我们使用的开发工具是Microsoft Visual Basic, 其它的开发工具,例如Visual C+或者Delphi等也同样可以使用。 3.1 Internet Transfer控件 Internet Transfer控件是Microsoft提供的一种ActiveX控件,它支持HTTP协议和FTP协议,在使用