HTTP客户端Wininet精品教程(ppt 48页).ppt_第1页
HTTP客户端Wininet精品教程(ppt 48页).ppt_第2页
HTTP客户端Wininet精品教程(ppt 48页).ppt_第3页
HTTP客户端Wininet精品教程(ppt 48页).ppt_第4页
HTTP客户端Wininet精品教程(ppt 48页).ppt_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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 Vis

17、ual Basic, 其它的开发工具,例如Visual C+或者Delphi等也同样可以使用。 3.1 Internet Transfer控件 Internet Transfer控件是Microsoft提供的一种ActiveX控件,它支持HTTP协议和FTP协议,在使用该控件时我们只需要对该控件设置一些属性并调用一些方法就可以实现一些基于HTTP的功能。例如下载文件、向服务器提交数据等,2.9.3 使用控件开发HTTP客户端应用(续), 控件属性 Internet Transfer控件包含了很多属性,其中比较重要的有 URL :该属性给出了客户所请求资源的URL ,该属性值会作为请求 消息中的

18、Request-URI发送给服务器 AccessType: 该属性决定了控件用来与服务器进行通讯的访问类型, 通过代理访问或直接访问,其取值可以有三种 icUseDefault (0) 表示使用注册表中找到的缺省设置值 icDirect (1) 表示直接连到Internet icNamedProxy( 2) 表示使用指定的代理服务器 Proxy :该属性决定使用的代理服务器的名称,只有当控件的AccessType属性设置为icNamedProxy (3) 时才使用该属性,2.9.3 使用控件开发HTTP客户端应用(续), 控件属性续 UserName :该属性表示用户名称,当服务器需要客户给出

19、认证信息时,可以对该属性进行设置,该属性值会包含在请求消息的头字段Authorization中发送给服务器 Password: 该属性表示与用户名称相关联的用户密码,该属性和UserName一起作为客户的认证信息提供给服务器 ResponseCode: 如果控件访问服务器时发生了错误,那么该属性中记录了错误的代码 ResponseInfo: 该属性与ResponseCode类似,它给出了对所发生错 误的文字性描述, 控件方法 Internet Transfer控件提供了以下几个比较重要方法: OpenURL 该方法向远程服务器请求下载指定URL的文档,其返回的结果为文档内容 该方法的语法为Op

20、enUrl(url ,datatype) 其中url表示被检索文档的URL ,datatype指定数据类型,其取值可以为以下两种: icString 0 表示把文档内容作为字符串来检索 icByteArray 1 表示把文档内容作为二进制字节数组来检索 事实上该方法相当于使用HTTP协议的GET方法向服务器发送请求OpenURL 方法以同步方式运行,在这里同步指的是当请求消息的发送和响应消息的接收未完成之前不能执行其它过程,2.9.3 使用控件开发HTTP客户端应用(续),2.9.3 使用控件开发HTTP客户端应用(续),Execute 该方法要求远程服务器执行用户指定的操作,相当于向服务器发

21、送HTTP请求消息 该方法的语法为Execute(url, operation, data, requestHeaders) 其中url表示被请求消息中包含的Request-URI, operation表示将要执行的操作类型,其取值为HTTP的请求方法,例如“GET” “HEAD” “POST”等,data指定了用于“POST ”或“PUT”等操作中向服务器提交的实体,requestHeaders指定了向远程服务器提交的请求头字段,例如传来的附加的标头 可以看出,通过设定Execute的参数,可以决定请求消息中包含的请求方法资源URL 头字段等各种内容 Execute 方法以异步方式传输数据,

22、Execute 方法在调用后会立刻返回而不会等待服务器的响应返回,而服务器返回的数据通常可以在后台用GetChunk方法进行,2.9.3 使用控件开发HTTP客户端应用(续),GetChunk 该方法能够读取从服务器返回数据,这些数据通常是 包含在服务器响应消息中的实体 该方法的语法为GetChunk( size ,datatype ) 其中size 表示要读取的数据块的大小,datatype指定数据类型,其取值可以为以下两种 icString 0 表示把数据作为字符串来读取 icByteArray 1 表示把文档内容作为二进制字节数组来读取 通常我们在控件的StateChanged事件中调用

23、该方法 GetHeader 该方法能够从服务器返回的响应消息中读取头字段 其语法格式为GetHeader (hdrName) 其中hdrName表示要读取的头字段的名称 通常我们可以在执行OpenURL后调用该方法,也可以在控件的StateChanged事件中调用该方法,2.9.3 使用控件开发HTTP客户端应用(续), 控件的事件 Internet Transfer控件能够产生一个重要的事件StateChanged 含义:该事件的发生标志着控件与服务器交互的状态有了变化,其 具体的状态值在事件的参数state中给出 用途 当客户端使用Execute这种异步方法时,可以利用该事件来 观察HTT

24、P交互的状态 通常可以在该事件中将state输出到log文件中 也可以在state为icResponseCompleted (12)时调用getchunk方法来读取从服务器返回的数据 下表中给出了StateChanged事件的各种状态,2.9.3 使用控件开发HTTP客户端应用(续),2.9.3 使用控件开发HTTP客户端应用(续),下面我们介绍如何使用WinInet开发HTTP客户端应用 WinInet是Microsoft提供的一个函数库,它对HTTP FTP等协议进行了抽象,并提供了高层的接口应用程序,可以利用这些API来访问HTTP等协议,从而实现Internet应用程序开发 在利用Wi

25、nInet来开发应用时,可以使用VC+ 也可以使用VBDelphi等RAD Tools 此处我们不再象介绍Internet Transfer控件那样详细地给出各个API的解释,而是通过一个具体的例子给出使用WinInet开发HTTP客户端应用的主要步骤 希望通过这个例子一方面能够对如何快速开发HTTP客户应用程序有一个具体的了解,另一方面能够加深对HTTP协议的理解,2.9.3 使用控件开发HTTP客户端应用(续),4.1 一个示例 我们希望开发一个HTTP客户端应用具有以下一些功能 功能1 能够接收用户的输入,并根据用户要求获取远程服务器上的资源 功能2 能够显示出HTTP客户和服务器交互过

26、程中的消息内容 功能3 能够将获取的文件资源的保存到本地的指定File 功能4 利用IE来显示所获取的文件资源 参见示例程序,2.9.3 使用控件开发HTTP客户端应用(续),4.2 主要实现步骤 step1 InternetOpen 该函数用于初始化WinInet DLL的使用,它让WinInet DLL初始化一个数据结构,并返回一个有效的句柄供后续的WinInet函数使用,2.9.3 使用控件开发HTTP客户端应用(续),4.2 主要实现步骤 step2 InternetConnect 该函数用于打开与指定Web站点的一个HTTP Session, 如果连接成功那么该函数将返回一个有效的H

27、TTP session句柄,2.9.3 使用控件开发HTTP客户端应用(续),4.2 主要实现步骤 step3 HttpOpenRequest 该函数用于创建一个HTTP请求的数据结构,在数据结构中包含了要发送给服务器的请求,以及作为请求的一部分的头字段,该函数如果执行成功的话,则返回一个有效的HTTP请求句柄,2.9.3 使用控件开发HTTP客户端应用(续),4.2 主要实现步骤 step4 HttpAddRequestHeaders 该函数用于向HTTP请求中添加一个或多个HTTP请求头字段,每个头字段以CRLF作为结束标记。该函数如果执行成功的话,则返回TRUE, 当HTTP客户程序比较

28、复杂,需要对发送给HTTP服务器的请求消息进行细节性控制时,通常会使用该函数,从而添加一些额外的、自由格式对头字段。,2.9.3 使用控件开发HTTP客户端应用(续),4.2 主要实现步骤 step5 HttpSendRequest 该函数用于将请求发送给HTTP服务器,该函数如果执行成功的话,则返回TRUE 。当HTTP客户程序需要向HTTP服务器发送额外的头字段,或在PUT、 POST等方法中向HTTP服务器提交数据时,该函数也可以实现这些功能。,2.9.3 使用控件开发HTTP客户端应用(续),4.2 主要实现步骤 step6 HttpQueryInfo 该函数用于读取请求或响应信息。该

29、函数如果执行成功的话,则返回TRUE。 客户程序可以使用该函数来读取向服务器所发送的请求消息。同时,在客户向服务器发送完请求后,服务器将向客户返回响应,包括:状态码、响应头等。这些信息保存在客户端中,客户程序可以使用该函数来读取这些响应信息。,2.9.3 使用控件开发HTTP客户端应用(续),4.2 主要实现步骤 step7 InternetReadFile 该函数用于读取服务器返回的实体数据。该函数如果执行成功的话,则返回TRUE。 当服务器收到客户的HTTP请求后,除了会返回状态码响应头以外,还可能会返回实体信息,客户端可以反复使用该函数来获取服务器返回的实体数据,直到lpNumberOfBytesRead为0, 这就好像从本地文件读取信息时遇到了EOF。,2.9.3 使用控件开发HTTP客户端应用(续),4.2 主要实现步骤 step8 InternetCloseHandle 该函数用于关闭已经打开的Internet句柄,例如,使用InternetOpen InternetConnect HttpOpenRequest等函数所打开的句柄。该函数如果执行成功的话,则返回TRUE。,作业1, 作业1-1 设计并实现一个HTTP文档下载程 序,该程序具备以下功能 基本功能 能

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论