HTTP客户端Wininet精品教程_第1页
HTTP客户端Wininet精品教程_第2页
HTTP客户端Wininet精品教程_第3页
HTTP客户端Wininet精品教程_第4页
HTTP客户端Wininet精品教程_第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 Navigator Microsoft

3、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协议中给出的规定可以看出,一个HTTP客户程序实

5、践上是HTTP协议内容的部分实现。因此要可以开发HTTP客户程序就应该透彻地了解HTTP协议中给出的客户和效力器的交互机制,正确地掌握各种音讯的语法和语义规范需求阐明的是除了要实现上述根本功能以外HTTP客户程序能够还要具备一些与HTTP协议本身无关的功能例如一个Web阅读器除了可以根据用户的要求将指定的Web页面下载下来,还要可以按照HTML规范对该页面进展解析,并在可视化的界面上将其展现出来.2.9.1 HTTP运用开发的分类(续)下面我们以Web阅读器为例对HTTP客户程序的内部构造进展粗略的分析.2.9.1 HTTP运用开发的分类(续)该Web阅读器由以下几个部分组成: 用户接口:接纳

6、用户的输入,并将效力器前往的呼应展现给用户。 用户输入解析器:对用户输入进展解析,并将结果传送给控制器。 控制部分:是Web阅读器的中心部分,担任协调各个部件的运作。 HTTP客户:假设用户的输入是要求访问HTTP效力器,那么就将其以HTTP恳求音讯的方式提交给效力器,并接纳和解析效力器的呼应。 其它客户用户:能够还会访问Internet上的FTP等效力,因此需求有基于相应协议的客户部分,例如FTP客户。 HTML解析器:假设效力器前往的音讯中包含HTML文件,那么对其按照HTML语法进展解析。 其它解析器:假设HTML文件中包含脚本言语等成分,例如VBScript, 那么对其按照相应的规范进

7、展解析,在后面的章节中我们将对VBScript进展详细讨论。 格式化显示:将解析结果输出到可视化界面上供用户阅读。.2.9.1 HTTP运用开发的分类(续)1.2 HTTP效力器程序 HTTP效力器 HTTP效力器程序的作用是为用户提供效力。例如前往用户想阅读的文档等,为了实现这一目的,HTTP效力器程序必需按照HTTP协议规范和客户进展交互。 如何和客户建立衔接 如何解释客户的恳求音讯 如何按照用户的要求执行相应的处置 运用何种语法格式来将处置结果作为呼应音讯前往给客户 一个HTTP效力器程序实践上也是HTTP协议内容的部分实现,因此要可以开发HTTP效力器程序也应该透彻地了解HTTP协议中

8、给出的客户和效力器交互机制,正确地掌握各种音讯的语法和语义规范。.2.9.1 HTTP运用开发的分类(续)需求阐明的是除了要实现上述根本功能以外,HTTP效力器程序还要具备其它的一些功能: 可以将客户提交的信息传送给CGI程序或ASP脚本等效力器端运用程序 接纳效力器端运用程序的输出结果等 这些功能的实现又依赖于效力器与效力器端运用程序的接口规范,例如CGI、 ISAPI等。如下图:.2.9.1 HTTP运用开发的分类(续).2.9.1 HTTP运用开发的分类(续) Proxy 作为HTTP客户和效力器之间的中介,Proxy等系统也是一种基于HTTP的运用程序 从HTTP客户的角度来看,Pro

9、xy可以接纳客户提出的恳求,并向客户前往呼应,因此Proxy可以看作是客户运用程序的效力器。 从HTTP效力器的角度来看,Proxy可以向效力器提出恳求,并接纳效力器前往的呼应,因此Proxy可以看作是效力器运用程序的客户。 在开发HTTP代理时,要同时实现HTTP协议对客户和效力器的要求,并参与一些额外的中间处置,例如代理的访问认证、日志与计费、缓存控制等。.2.9.1 HTTP运用开发的分类(续).2.9.1 HTTP运用开发的分类(续) 效力器端运用程序的开发者最好可以了解HTTP客户和效力器的交互机制,掌握一些HTTP音讯的语法和语义, 需求阐明的是除了要实现上述根本功能以外,HTTP

10、效力器程序还要具备其它的一些功能,例如 可以根据用户提交的信息对数据库效力器进展访问 访问Email等其它Internet效力 这些功能的实现又依赖于其它的一些规范例如ODBC OpenDataBase Connection、 POP3 PostOffice Protocol version 3和SMTP Simple Messaging Transport Protocol 等,有关这些规范的内容不属于本课程的范畴,感兴趣的可以参见相关资料。.2.9.2 HTTP运用开发方法与例如 在上面引见的三种HTTP运用中,HTTP客户和HTTP效力器与HTTP协议亲密相关。 下面我们对这两种运用的开

11、发方法进展引见,关于效力器端运用程序的开发,我们将在后续对CGI 和ASP 部分进展引见。 运用程序通常建立在系统提供的运用编程接口API ApplicationProgramming Interface 之上HTTP运用程序的开发也不例外。按照所运用API笼统层次的不同,我们将其分为两种: 一种运用的是网络层的运用编程接口,例如Windows和Unix平台上的Socket API等。 另一种运用的是运用层上的编程接口,例如Windows平台上提供的WinInet DLL和Internet Transfer Control等。.2.9.2 HTTP运用开发方法与例如(续).2.9.2 HTTP

12、运用开发方法与例如(续)2.1 运用Socket编程接口Socket接口是TCP/IP网络最为通用的API之一,它提供了很多函数和例程供我们来开发TCP/IP网络上的运用程序。此处我们不对Socket编程的细节进展引见,仅给出了运用Socket接口来实现HTTP客户和效力器的普通方法,如下图。在该图中一切的Socket函数用英文标出,而对HTTP音讯的处置用中文标出。.2.9.2 HTTP运用开发方法与例如(续).2.9.2 HTTP运用开发方法与例如(续) HTTP效力器运用程序的开发 首先,运用Socket( )来生成一个Socket ,并经过bind( )将该Socket绑定到HTTP端

13、口 然后运用listen( )来侦听客户的衔接恳求 当客户的衔接恳求到达后,运用accept( )来和客户建立衔接 接着运用read( )来读取客户发来的恳求音讯 当收到恳求音讯后,就要按照HTTP协议对音讯进展解析 根据客户的恳求执行相应的处置程序,例如读取指定的HTML文件 之后效力器将执行结果封装为符合HTTP协议的呼应音讯 运用write( )将呼应音讯发送给客户这样,一次HTTP交互终了。效力器又可以为另一个客户恳求效力了.2 HTTP运用开发方法与例如 在HTTP客户运用程序的开发 当用户提出某个要求时,客户程序首先将用户的要求封装为符合HTTP协议规定的恳求音讯 然后,运用Soc

14、ket( )来生成一个Socket, 并经过connect( )来恳求和效力器建立衔接在胜利地建立衔接后,客户运用wrtie( )将恳求音讯发送给效力器 在效力器前往呼应后,客户运用read( )来读取效力器的呼应音讯,并按照HTTP协议对音讯进展解析,例如从音讯实体中提取出用户所需求阅读的文件 之后,将效力器的呼应展现给用户这样,客户便完成了用户所提出的一个要求.2 HTTP运用开发方法与例如 Socket API的优缺陷 优点 在运用Socket API这种网络编程接口来开发HTTP运用程序时,开发者可以深化到运用的底层,可以直接控制HTTP和TCP/IP上细节,从而便于实现一些高级的特性

15、 缺陷 它对开发者的要求比较高,开发者必需求透彻地了解HTTP协议,同时要熟习TCP/IP网络和Socket编程 此外开发过程也比较复杂,开发者必需处置许多细节问题:例如数据包的封装与解析、网络字节序的转换、收发缓冲区的开辟与释放等等.2.9.2 HTTP运用开发方法与例如(续)2.2 运用动态链接库或者ActiveX控件 为了顺应快速开发Internet运用程序的要求,我们可以运用一些现成的动态链接库或者ActiveX控件。例如Microsoft提供的WinInet DLL和Internet Transfer Control等。 这些函数库和控件本身曾经实现了HTTP客户的功能,并将其经过A

16、PI提供出来供开发者调用。 这样,我们在开发运用程序时就不需求涉及到Socket和HTTP的细节就可以方便地运用HTTP等效力,从而加快了运用开发的速度 严厉地说,此时我们开发的不并是HTTP客户本身,而是一个HTTP客户的外包装程序,与HTTP真正亲密相关的部分曾经在函数库或控件的内部完成了.2.9.3 运用控件开发HTTP客户端运用 下面,我们引见如何运用Internet Transfer控件来开发HTTP客户端运用,在此我们运用的开发工具是Microsoft Visual Basic, 其它的开发工具,例如Visual C+或者Delphi等也同样可以运用。3.1 Internet Tr

17、ansfer控件 Internet Transfer控件是Microsoft提供的一种ActiveX控件,它支持HTTP协议和FTP协议,在运用该控件时我们只需求对该控件设置一些属性并调用一些方法就可以实现一些基于HTTP的功能。例如下载文件、向效力器提交数据等.2.9.3 运用控件开发HTTP客户端运用(续) 控件属性Internet Transfer控件包含了很多属性,其中比较重要的有 URL :该属性给出了客户所恳求资源的URL ,该属性值会作为恳求音讯中的Request-URI发送给效力器 AccessType: 该属性决议了控件用来与效力器进展通讯的访问类型,经过代理访问或直接访问,

18、其取值可以有三种 icUseDefault 0 表示运用注册表中找到的缺省设置值 icDirect 1 表示直接连到Internet icNamedProxy 2 表示运用指定的代理效力器 Proxy :该属性决议运用的代理效力器的称号,只需当控件的AccessType属性设置为icNamedProxy (3) 时才运用该属性.2.9.3 运用控件开发HTTP客户端运用(续) 控件属性续 UserName :该属性表示用户称号,当效力器需求客户给出认证信息时,可以对该属性进展设置,该属性值会包含在恳求音讯的头字段Authorization中发送给效力器 Password: 该属性表示与用户称号

19、相关联的用户密码,该属性和UserName一同作为客户的认证信息提供应效力器 ResponseCode: 假设控件访问效力器时发生了错误,那么该属性中记录了错误的代码 ResponseInfo: 该属性与ResponseCode类似,它给出了对所发生错误的文字性描画. 控件方法Internet Transfer控件提供了以下几个比较重要方法: OpenURL 该方法向远程效力器恳求下载指定URL的文档,其前往的结果为文档内容 该方法的语法为OpenUrl(url ,datatype) 其中url表示被检索文档的URL ,datatype指定数据类型,其取值可以为以下两种:icString 0

20、表示把文档内容作为字符串来检索icByteArray 1 表示把文档内容作为二进制字节数组来检索 现实上该方法相当于运用HTTP协议的GET方法向效力器发送恳求OpenURL 方法以同步方式运转,在这里同步指的是当恳求音讯的发送和呼应音讯的接纳未完成之前不能执行其它过程2.9.3 运用控件开发HTTP客户端运用(续).2.9.3 运用控件开发HTTP客户端运用(续) Execute 该方法要求远程效力器执行用户指定的操作,相当于向效力器发送HTTP恳求音讯 该方法的语法为Execute(url, operation, data,requestHeaders) 其中url表示被恳求音讯中包含的R

21、equest-URI, operation表示将要执行的操作类型,其取值为HTTP的恳求方法,例如“GET “HEAD “POST等,data指定了用于“POST 或“PUT等操作中向效力器提交的实体,requestHeaders指定了向远程效力器提交的恳求头字段,例如传来的附加的标头 可以看出,经过设定Execute的参数,可以决议恳求音讯中包含的恳求方法资源URL 头字段等各种内容 Execute 方法以异步方式传输数据,Execute 方法在调用后会立刻前往而不会等待效力器的呼应前往,而效力器前往的数据通常可以在后台用GetChunk方法进展.2.9.3 运用控件开发HTTP客户端运用(

22、续) GetChunk 该方法可以读取从效力器前往数据,这些数据通常是包含在效力器呼应音讯中的实体 该方法的语法为GetChunk( size ,datatype ) 其中size 表示要读取的数据块的大小,datatype指定数据类型,其取值可以为以下两种icString 0 表示把数据作为字符串来读取icByteArray 1 表示把文档内容作为二进制字节数组来读取 通常我们在控件的StateChanged事件中调用该方法 GetHeader 该方法可以从效力器前往的呼应音讯中读取头字段 其语法格式为GetHeader (hdrName) 其中hdrName表示要读取的头字段的称号 通常我

23、们可以在执行OpenURL后调用该方法,也可以在控件的StateChanged事件中调用该方法.2.9.3 运用控件开发HTTP客户端运用(续) 控件的事件Internet Transfer控件可以产生一个重要的事件StateChanged 含义:该事件的发生标志着控件与效力器交互的形状有了变化,其详细的形状值在事件的参数state中给出 用途 当客户端运用Execute这种异步方法时,可以利用该事件来察看HTTP交互的形状 通常可以在该事件中将state输出到log文件中 也可以在state为icResponseCompleted (12)时调用getchunk方法来读取从效力器前往的数据下

24、表中给出了StateChanged事件的各种形状.2.9.3 运用控件开发HTTP客户端运用(续).2.9.3 运用控件开发HTTP客户端运用(续)下面我们引见如何运用WinInet开发HTTP客户端运用 WinInet是Microsoft提供的一个函数库,它对HTTP FTP等协议进展了笼统,并提供了高层的接口运用程序,可以利用这些API来访问HTTP等协议,从而实现Internet运用程序开发 在利用WinInet来开发运用时,可以运用VC+ 也可以运用VBDelphi等RAD Tools 此处我们不再象引见Internet Transfer控件那样详细地给出各个API的解释,而是经过一个

25、详细的例子给出运用WinInet开发HTTP客户端运用的主要步骤 希望经过这个例子一方面可以对如何快速开发HTTP客户运用程序有一个详细的了解,另一方面可以加深对HTTP协议的了解.2.9.3 运用控件开发HTTP客户端运用(续)4.1 一个例如我们希望开发一个HTTP客户端应器具有以下一些功能 功能1 可以接纳用户的输入,并根据用户要求获取远程效力器上的资源 功能2 可以显示出HTTP客户和效力器交互过程中的音讯内容 功能3 可以将获取的文件资源的保管到本地的指定File 功能4 利用IE来显示所获取的文件资源参见例如程序.2.9.3 运用控件开发HTTP客户端运用(续)4.2 主要实现步骤

26、step1 InternetOpen 该函数用于初始化WinInet DLL的运用,它让WinInet DLL初始化一个数据构造,并前往一个有效的句柄供后续的WinInet函数运用.2.9.3 运用控件开发HTTP客户端运用(续)4.2 主要实现步骤step2 InternetConnect 该函数用于翻开与指定Web站点的一个HTTP Session, 假设衔接胜利那么该函数将前往一个有效的HTTP session句柄.2.9.3 运用控件开发HTTP客户端运用(续)4.2 主要实现步骤step3 HttpOpenRequest 该函数用于创建一个HTTP恳求的数据构造,在数据构造中包含了要

27、发送给效力器的恳求,以及作为恳求的一部分的头字段,该函数假设执行胜利的话,那么前往一个有效的HTTP恳求句柄.2.9.3 运用控件开发HTTP客户端运用(续)4.2 主要实现步骤step4 HttpAddRequestHeaders 该函数用于向HTTP恳求中添加一个或多个HTTP恳求头字段,每个头字段以CRLF作为终了标志。该函数假设执行胜利的话,那么前往TRUE, 当HTTP客户程序比较复杂,需求对发送给HTTP效力器的恳求音讯进展细节性控制时,通常会运用该函数,从而添加一些额外的、自在格式对头字段。.2.9.3 运用控件开发HTTP客户端运用(续)4.2 主要实现步骤step5 Http

28、SendRequest 该函数用于将恳求发送给HTTP效力器,该函数假设执行胜利的话,那么前往TRUE 。当HTTP客户程序需求向HTTP效力器发送额外的头字段,或在PUT、 POST等方法中向HTTP效力器提交数据时,该函数也可以实现这些功能。.2.9.3 运用控件开发HTTP客户端运用(续)4.2 主要实现步骤step6 HttpQueryInfo 该函数用于读取恳求或呼应信息。该函数假设执行胜利的话,那么前往TRUE。 客户程序可以运用该函数来读取向效力器所发送的恳求音讯。同时,在客户向效力器发送完恳求后,效力器将向客户前往呼应,包括:形状码、呼应头等。这些信息保管在客户端中,客户程序可

29、以运用该函数来读取这些呼应信息。.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

提交评论