WTL 的 INET






4.86/5 (9投票s)
2005年8月12日
1分钟阅读

59181

986
为 WTL 开发者提供的互联网类。
引言
在本文中,我将介绍一些我编写的用于在 WTL 下使用 INET 的包装类。为了简化起见,代码使用 C++ 异常,因此无需检查每个函数调用的结果代码。
用法
所有句柄都继承自 CInternetHandle
,因此无需手动销毁它们。
要开始使用 INET,首先需要创建一个会话。这可以通过创建一个 CInternetSession
对象来完成。您可以在构造函数中指定用户代理,或者将其留空(在这种情况下,代码将使用您的应用程序名称作为用户代理字符串)。
CInternetSession Session(_T("Test Application"));
连接
当前有两种类型的连接:HTTP 和 FTP。要创建连接,只需使用服务器参数构造一个对象即可。
CHttpConnection Connection1(Session,_T("https://codeproject.org.cn/")); CFtpConnection Connection2(Session,_T("ftp://ftp.codeproject.com/"));
文件
所有互联网文件都继承自 CInternetFile
。此外,还有三种特殊文件:HTTP/HTTPS 和 FTP。您可以通过已经创建的连接来创建文件对象,或者通过会话对象创建新的文件对象。
BYTE Buffer[4096]; CHttpFile File1(Connection1,_T("GET"),_T("/")); File1.SendRequest(); for (DWORD dwRead1;dwRead1=File1.Read(Buffer,sizeof(Buffer));); CHttpFile File2(Session,_T("https://codeproject.org.cn/")); for (DWORD dwRead2;dwRead2=File2.Read(Buffer,sizeof(Buffer)););
在从文件读取时,还有一个特殊选项,允许您计时下载,以及将其限制为一定的下载速度。您可以使用 CInternetFile::CInfo
类来执行此操作。
BYTE Buffer[4096]; CHttpFile File3(Session,_T("https://codeproject.org.cn/")); CInternetFile::CInfo Info(File3); Info.SetRateLimit(10.5); for (DWORD dwRead3;dwRead3=File3.Read(Buffer,sizeof(Buffer),Info);) { // Info.GetTimeLeft() = Seconds left for download }
异常
当发生错误时,代码会抛出异常 (CInternetException
)。您可以使用 GetErrorMessage
函数获取错误消息。
try { CInternetSession Session; CHttpFile File(Session,_T("https://codeproject.org.cn/")); } catch(CInternetException& err) { MessageBox(err.GetErrorMessage()); }
错误与限制
我尝试实现一种回调机制,但它仍然存在一些问题。现在请避免使用它。此外,由于我没有真正需要 gopher,所以我从未将其放入我的代码中。如果您需要,欢迎您添加它。我正在我的项目中使用的代码,但它可能仍然包含一些错误。如果您发现任何问题,请通知我。