使用http协议方法

上传人:xzh****18 文档编号:34721444 上传时间:2018-02-27 格式:DOC 页数:7 大小:53.50KB
返回 下载 相关 举报
使用http协议方法_第1页
第1页 / 共7页
使用http协议方法_第2页
第2页 / 共7页
使用http协议方法_第3页
第3页 / 共7页
使用http协议方法_第4页
第4页 / 共7页
使用http协议方法_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《使用http协议方法》由会员分享,可在线阅读,更多相关《使用http协议方法(7页珍藏版)》请在金锄头文库上搜索。

1、用WinInet开发Internet客户端应用指南(一)一、概述一个Internet客户端程序的目的是通过Internet协议如:HTTP、FTP等 来存取网络数据源(服务器)的信息。客户端程序可以访问服务器获得象天气 预报,股票价格、重要新闻数据,甚至是与服务器交换信息。Internet客户端 程序可以通过外部网络(Internet)或内部网络(一般为Intranet)访问服务 器。为了开发Internet客户端程序。MFC类库提供了专门的 Win32 Internet 扩展接口,也就是WinInet。MFC将WinInet封装在一个标准的、易于使用的类 集合中。在编写WinInet客户端程

2、序时,你既可以直接调用Win32函数,也可以 使用WinInet类库。Win32 Internet 扩展提供了对普通Internet协议的访问,这些协议包括: HTTP、FTP和Gopher。Gopher已经渐渐淡出。借助于WinInet编程接口,开发 人员不必去了解Winsock、TCP/IP和特定Internet协议的细节就可以编写出高 水平的Internet客户端程序。WinInet为所有几种协议(HTTP、FTP和 Gopher)提供了统一的函数集,也就是Win32 API接口。利用这些统一的函数 集,大大简化了针对HTTP、FTP等协议的编程,从而轻松地将Internet集成到 自己

3、的应用程序中。底层协议的转换(如从FTP到HTTP)只要对源代码稍作修 改就可以完成。在Visual C+工程中提供有两种方式来使用WinInet。一种是直接调用 Win32 Internet函数,另一种是使用WinInet类库。MFC对WinInet的封装是通过提供三个由CStdioFile派生类实现的。这三 个派生类是:CInternetFile、 CHttpFile 和 CGopherFile。由于Gopher协议 已经很少使用,所以本文将不再对CGopherFile进行讨论。对开发人员来说, 不管你以前是否用过CStdioFile,WinInet都是很好理解并且易于使用的。它 使得存取

4、Internet数据易如反掌,使得Internet数据和本地数据的处理一致 透明,数据的存储位置已经不再重要。MFC WinInet 类有如下优点: 缓冲器输入输出 数据的类型安全处理 许多函数的参数都是缺省值 对普通的Internet错误进行异常处理 自动清除打开的句柄和连接 使用 WinInet 提供的API函数,你可以: 通过HTTP协议下载HTML页,HTTP协议是专门用于在服务器和客户浏览 器之间传输HTML页。 发送FTP请求上传或下载文件以及获取服务器的目录信息。通过匿名登 陆下载文件便是FTP的典型应用。 其它基于HTTP、FTP协议的应用。 使用 WinInet 的一般流程为

5、:图一 下表描述了一个Internet客户端程序实现的一般步骤: (表一) 实现 方法 建立一个连接 创建CInternetSession对象,它是WinInet Internet客户应用的前提条件 打开一个URL 建立一个连接,调用CInternetSession:OpenURL 函数,返回一个只读资源对象 读取 URL 数据 打开一个URL,调用CInternetSession:QueryOption 查询 Internet 选项设置建立一个连接,调用CInternetFile:Read 设置一个Internet选项 建立一个连接,调用CInternetSession:SetOption

6、设置一个用状态信息调用 的函数 建立一个连接,调用 CInternetSession:EnableStatusCallback重写CInternetSession:OnStatusCallback函数 关闭连接 用CInternetSession对象方法,清除打开的连接 为了创建Internet客户端程序,MFC提供了如下的C+类和全程函数: C+类 CInternetSession (父类 CObject) CInternetConnection (父类 CObject) CFtpConnection CGopherConnection CHttpConnection CInternetFi

7、le(父类 CStdioFile) CGopherFile CHttpFile CFileFind(父 类 CObject) CFtpFileFind CGopherFileFind CGopherLocator(父类 CObject) CInternetException(父类 CException) 全程函数: AfxParseURL AfxGetInternetHandleType AfxThrowInternetException这些类和全程函数除CFileFind在AFX.H里声明之外,其余都在 AFXINET.H文件里声明。它们对HTTP、FTP和Gopher等协议进行了高度抽象,

8、 形成了一套高级API函数。利用这些API可以快速直接地开发Internet应用。 例如,连接到FTP服务器一般需要几个步骤,而且需要做一些底层处理。但使 用上述的MFC类提供的API,只需要对CInternetSession:GetFTPConnection 进行一次调用,便可以轻松建立连接。大家知道,每一个Internet应用其数据交换都是建立在Internet会话 (Session)的基础之上的,MFC是通过CInternetSession类对象来实现 Internet会话的。用这个类不仅可以创建会话,而且可以创建几个并发的 Internet会话。为了与服务器进行通讯,除了要创建CInt

9、ernetSession对象之外,还必须 创建CInternetConnection对象,针对不同的协议,CInternetConnection对象 有三种类型: CInternetSession:GetFtpConnection CInternetSession:GetHttpConnection CInternetSession:GetGopherConnection 这些函数调用并不会读写服务器上的文件。如果你想要读写数据,必须要打开 文件才能操作。其处理流程应该是这样的: 首先创建 CInternetSession 对象实例 如果创建的Session要读写文件,则必须创建 CInter

10、netFile 对象实例 (或者是它的子类CHttpFile、CGopherFile 对象实例)。其实,读取 数据最容易的方式是调用 CInternetSession:OpenURL函数。这个函 数解析你提供的统一资源定位符(URL),然后打开与URL指定的服务 器连接,同时返回一个只读的CInternetFile对象。 CInternetSession:OpenURL不针对特定的协议类型不管是FTP还 是HTTP都可以调用,它甚至可以处理本地文件,此时返回的是 CStdioFile,而不是CInternetFile。 如果创建的Session不读写文件,而是要实现其它的任务,如删除某个 FT

11、P目录下的文件等,则你不需要创建CInternetFile实例。 创建CInternetFile对象的方法有两种: 如果用CInternetSession:OpenURL建立与服务器的连接,调用返回 CStdioFile。 如果用CInternetSession:GetFtpConnection、GetGopherConnection 或者CHttpConnection:OpenRequest建立与服务器的连接,你必须调 用相应的CFtpConnection:OpenFile、CGopherConnection:OpenFile 或者CHttpConnection:OpenRequest,返回

12、的内容也与 CInternetFile、CGopherFile或者CHttpFile对应。 综上所述,实现Internet客户端应用的步骤因协议而异。要看你是创建基 于OpenURL的一般Internet客户端应用,还是使用GetXXXConnection函数之 一针对特定协议的Internet客户端应用。在后继文章中我们将进一步讨论用WinInet实现Internet客户端应用程序 的具体步骤和细节二、实现步骤大家知道,每个Internet客户端程序都伴随有一定的目的行为,如读文件、 写文件、删除文件等等。客户端的程序要实现这些行为的先决条件是建立 Internet连接。然后再根据不同的目的

13、进行具体的操作。为了方便起见,下面 这这些张表格针对不同的应用行为列出了所需要的具体操作。其中列出了一般 的Internet URL (FTP、或者 HTTP)客户端行为要实现某个目标所必须使用的 方法。这张表格的内容来自MSDN。我对部分我认为重要的地方做了补充。 (表一)一个典型的Internet客户端程序的处理流程 目的 方法 结果 开始一 个Internet session 创建 CInternetSession 对象初始化WinInet,并连接服 务器 读取或设置 InternetQuery 选项 (如超时或重试次数) 调用 CInternetSession:SetOption 不成

14、功返回FALSE 建立回调函数监视session 状态调用CInternetSession:EnableStatusCallback 建立回调函数 CInternetSession:OnStatusCallback,重写 OnStatusCallback,创建自己的回调例程 Internet服务器Intranet服务器或 本地文件 调用 CInternetSession:OpenURL 解析并打开到指定服务器的连接, 返回CStdioFile(如果你传递的OpenURL是本地文件名)或CInternetFile对 象,通过存取这个对象,获得服务器或文件的数据读文件 调用 CInternetFi

15、le:Read 用你提供的Buffer读指定的字节数异常处理 在 CInternetException 类中处理 处理所有普通的 Internet 异常类型 结束 Internet session 处理 CInternetSession对象自动清除打开的句柄的连接 (表二)典型的 FTP 客户端程序实现的一般步骤 目的 方法 结果 开始一个FTP会话,建立一个FTP连接创建一个 CInternetSession对象,调用CInternetSession:GetFtpConnection 初始化 WinInet 并联接服务器 连接到一个FTP Server 用 CInternetSession:

16、GetFtpConnection 返回一个CFtpConnection对象 CD到 FTP 服务器的一个新目录 用CFtpConnection:SetCurrentDirectory CD到FTP服务器的一个 新目录 Find 第一个FTP目录中的文件创建一个CFtpFileFind对象,调用 CFtpFileFind:FindFile,OpenURL函数返回一个只读资源对象;调用 CFtpFileFind:FindFile Find第一个文件,如果文件每找到返回FALSE 枚举所 有可获得的资源,Find下一个FTP目录中的文件 Find下一个资源,调用 CFtpFileFind:FindNextFile直到返回FALSE。 Find下一个文件 如果文件没找到返回FALSE 打开FindFile或FindNextFile找到的文件(用于 读写)调用CFtpConnection:OpenFi

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 商业合同/协议

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号