利用Win32的网络函数创建一个网络浏览器

利用Win32的网络函数创建一个网络浏览器

Dale Rogerson

Microsoft 网络开发技术小组

摘要

这篇技术性文章讨论了如何利用Microsoft Win32网络函数创建一个网络浏览器。这篇文章的宗旨是让读者了解一些Win32网络函数的作用、能力和使用范围,而不是为这些功能给出一个详细的文档。这篇文章所配合的SurfBear样本应用程序使用Win32网络函数从网络服务器上读取HTML文件,并把它们显示成原始的、没有经过格式化的文本。

 

介绍

不通过网络,你就无法了解我的一个朋友。计算机杂志已经在internet上设置了电子期刊,而本地的报纸也已经把整个段落都放到了网络上。事实上,许多报纸都在联机。每个人都有一个主页,甚至一些无家可归的人都有一个主页。虽然有许多关于网络的消息难免言过其实,但网络正在变成计算机整体的一部分已经是无庸置疑的了。

Microsoft 已经介绍了Microsoft Win32网络函数来协助开发者把网络变成他们的应用程序的整体部分。这些新的功能简化了使用FTP(文件传输协议)、和HTTP(超文本传输协议)访问网络。使用Win32网络函数的开发者不需要对TCP/IP或Windows 配件。对于一些最普通的操作,开发者不需要知道他们正在使用的某个协议的细节。

最终,Win32网络函数将成为Win32应用程序接口的一部分并且与基于Windows的不同的平台一起发布。最初,Win32网络函数将安装在一个叫做WININET.DLL的再分布式动态链接库里。(来自Microsoft网络软件开发工具包,其网址是:http://www.microsoft.com/inter/sdle/)。这属于网络开发工具包的一部分。

这篇文章说明了如何使用Win32网络函数去创建一个简单的网络浏览器。它没有具体详细的讨论这些功能的细节,但对他们的用法和操作给出了一个演示。请参考网址是http://www.microsoft.com/intdev/sdk/docs/wininet的Microsoft Win32网络函数的主题,可以了解到全部的细节。

这篇文章是配合SurfBear样本应用程序而创作的。SurfBear是一个HTML文件。覆盖了这个过程种特定的网络部分,但它没有涉及与这个过程有关的用户接口问题或HTML文件的显示或操作问题。

注意:这篇文章是基于WININET.DLL一个相当早的版本。很可能其中的参数名、标识名和函数名发生了改变。但是函数的范围和意图应该还是和这篇文章中描述的是一致的。

 

网络函数

最好的探讨Win32网络函数的方法是直接进入代码。下面的代码是样本的代码,为了方便阅读,错误处理部分已经被删除掉了。

HINTERNET hNet = ::InternetOpen("MSDN SurfBear",
PRE_CONFIG_INTERNET_ACCESS,
NULL,
INTERNET_INVALID_PORT_NUMBER,
0) ;

HINTERNET hUrlFile = ::InternetOpenUrl(hNet,
"http://www.microsoft.com",
NULL,
0,
INTERNET_FLAG_RELOAD,
0) ;

char buffer[10*1024] ;
DWORD dwBytesRead = 0;
BOOL bRead = ::InternetReadFile(hUrlFile,
buffer,
sizeof(buffer),
&dwBytesRead);

::InternetCloseHandle(hUrlFile) ;

::InternetCloseHandle(hNet) ;
上面列举的代码包括四个网络函数:InternetOpen、InternetOpenOrl、InternetReadFile和InternetCloseHandle。下面我们依次对这些函数进行分析。

InternetOpen

InternetOpen初始化WININET.DLL。它在其他的Win32网络函数之前被调用。

HINTERNET hNet = ::InternetOpen(
"MSDN SurfBear", // 1 LPCTSTR lpszCallerName
PRE_CONFIG_INTERNET_ACCESS, // 2 DWORD dwAccessType
"", // 3 LPCTSTR lpszProxyName
INTERNET_INVALID_PORT_NUMBER, // 4 INTERNET_PORT nProxyPort
0 // 5 DWORD dwFlags
) ;
InternetOpen返回一个类型为HINTERNET的句柄。其他的Win32网络函数把这个句柄当作一个参数。现在你不能把一个HINTERNET句柄用在类似于ReadFile之类的其他Win32函数中

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
调用的DLL命令: .DLL命令 InternetOpenA, 整数型, "WinINet.dll" .参数 lpszAgent, 文本型 .参数 dwAccessType, 整数型 .参数 lpszProxyName, 文本型 .参数 lpszProxyBypass, 文本型 .参数 dwFlags, 整数型 .DLL命令 InternetCloseHandle, 逻辑型, "WinINet.dll" .参数 hInternet, 整数型 .DLL命令 InternetConnectA, 整数型, "WinINet.dll" .参数 hInternet, 整数型 .参数 lpszServerName, 文本型 .参数 nServerPort, 整数型 .参数 lpszUserName, 文本型 .参数 lpszPassword, 文本型 .参数 dwService, 整数型 .参数 dwFlags, 整数型 .参数 dwContext, 整数型 .DLL命令 HttpOpenRequestA, 整数型, "WinINet.dll" .参数 hConnect, 整数型 .参数 lpszVerb, 文本型 .参数 lpszObjectName, 文本型 .参数 lpszVersion, 文本型 .参数 lpszReferer, 文本型 .参数 lplpszAcceptTypes, 文本型 .参数 dwFlags, 整数型 .参数 dwContext, 整数型 .DLL命令 HttpSendRequestA, 逻辑型, "WinINet.dll" .参数 hRequest, 整数型 .参数 lpszHeaders, 文本型 .参数 dwHeadersLength, 整数型 .参数 lpOptional, 文本型 .参数 dwOptionalLength, 整数型 .DLL命令 InternetReadFile, 逻辑型, "WinINet.dll" .参数 hFile, 整数型 .参数 lpBuffer, 字节集, 传址 .参数 dwNumberOfBytesToRead, 整数型 .参数 lpdwNumberOfBytesRead, 整数型, 传址 .DLL命令 HttpQueryInfoA, 逻辑型, "WinINet.dll" .参数 hRequest, 整数型 .参数 dwInfoLevel, 整数型 .参数 lpvBuffer, 文本型, 传址 .参数 lpdwBufferLength, 整数型, 传址 .参数 lpdwIndex, 整数型 .DLL命令 InternetSetCookieA, 逻辑型, "WinINet.dll" .参数 lpszUrl, 文本型 .参数 lpszCookieName, 文本型 .参数 lpszCookieData, 文本型 .DLL命令 CreateThread, 整数型 .参数 lpThreadAttributes, 整数型 .参数 dwStackSize, 整数型 .参数 lpStartAddress, 子程序指针 .参数 lpParameter, 整数型 .参数 dwCreationFlags, 整数型 .参数 lpThreadId, 整数型, 传址 .DLL命令 CloseHandle, 逻辑型 .参数 hObject, 整数型 .DLL命令 TerminateThread, 逻辑型 .参数 hThread, 整数型 .参数 dwExitCode, 整数型 .DLL命令 MsgWaitForMultipleObjects, 整数型 .参数 nCount, 整数型 .参数 pHandles, 整数型, 传址 .参数 bWaitAll, 逻辑型 .参数 dwMilliseconds, 整数型 .参数 dwWakeMask, 整数型 .DLL命令 HttpAddRequestHeaders, , "wininet.dll", "HttpAddRequestHeadersA" .参数 hRequest, 整数型 .参数 lpszHeaders, 文本型, 传址 .参数 dwHeadersLength, 整数型 .参数 dwModifiers, 整数型
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值