WinInet中的几个网络函数
0
InternetGetConnectedState
BOOL InternetGetConnectedStat e(OUT LPDWORD lpdwFlags, IN DWORD dwReserved );
判断当前是否有internet连接
有则返回 true,无则 false
有则返回 true,无则 false
若有连接,则lpdwFlags 中会存放着连接方式
1
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 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网络函数把这个句柄当作一个参数。
InternetOpen 的第一个参数lpszCallerName指定正在使用网络函数的应用程序。当HTTP协议使用时,这个名字将变成用户代理。
第二个参数dwAccessType指定访问类型。
第二个参数dwAccessType指定访问类型。
NProxyPort参数用在CERN_PROXY_INTERNET_ACCESS中用来指定使用的端口数。使用INTERNET_INVALID_PORT_NUMBER相当于提供却省的端口数。
最后一个参数dwFlags,设置额外的选择。
最后一个参数dwFlags,设置额外的选择。
当结束使用Wein32网络函数时,应该调用
InternetCloseHandle释放InternetOpen分配的资源。
2
InternetOpenUrl函数连接到一个网络服务器上并且最被从服务器上读取数据。InternetOpenUrl能对FTP,Gopher或HTTP协议起作用。
HINTERNET hUrlFile = ::InternetOpenUrl(
hNet, // 1 HINTERNET hInternetSession
"http://www.microsoft.com", // 2 LPCTSTR lpszUrl
NULL, // 3 LPCTSTR lpszHeaders
0, // 4 DWORD dwHeadersLength
INTERNET_FLAG_RELOAD, // 5 DWORD dwFlags
0 // 6 DWORD dwContext
) ;
InternetOpenUrl返回一个HINTERNET,它被传递给在这个URL(统一资源定位)上操作的函数。
InternetOpenUrl 的第一个参数hInternetSession是从InternetOpen返回的句柄。第二个参数lpszUrl是需要的资源的URL。下面两个参数 lpszHeaders和HeaderLength用来向服务器传送额外的信息。使用这些参数要求具有正在使用的特定协议的知识。
DwFlag是一个可以用几种方式修改InternetOpenUrl行为的标志,InternetOpenUrl的行为包括关闭、隐藏,使原始数据可用和用存在的连接取代开辟一个新的连接。
最后一个参数dwContext是一个 DWORD上下文值。如果有一个值已经被指定,它将被送到状态回调函数。如果这个值是0,信息将不会被送到状态回调函数。
3
InternetReadFile函数用来读取文件
BOOL bRead = ::InternetReadFile(
hUrlFile, // 1 HINTERNET hFile
buffer, // 2 LPVOID lpBuffer
sizeof(buffer), // 3 DWORD dwNumberOfBytesToRead
&dwBytesRead // 4 LPDWORD lpdwNumberOfBytesRead
);
hUrlFile, // 1 HINTERNET hFile
buffer, // 2 LPVOID lpBuffer
sizeof(buffer), // 3 DWORD dwNumberOfBytesToRead
&dwBytesRead // 4 LPDWORD lpdwNumberOfBytesRead
);
InternetReadFile接收InternetOpenUrl返回的句柄。它也对其他Win32网络函数,例如FtpOpenFile,FopherOpenFile和HttpOpenRequest返回的句柄有影响。
剩 下的InternetReadFile的三个参数也非常的明白直接。Inbuffer是指向保留数据的缓冲区的一个无返回值指 针,dwNumberOfByteToRead以字节为单位指定缓冲区的尺寸。最后一个参数,lpdwNumberOfBytesRead是一个指向包含 读入缓冲区字节数的变量的指针。如果返回值是TRUE,而且lpdwNumberOfBytesRead指向0,则文件已经读到了文件的末尾。
剩 下的InternetReadFile的三个参数也非常的明白直接。Inbuffer是指向保留数据的缓冲区的一个无返回值指 针,dwNumberOfByteToRead以字节为单位指定缓冲区的尺寸。最后一个参数,lpdwNumberOfBytesRead是一个指向包含 读入缓冲区字节数的变量的指针。如果返回值是TRUE,而且lpdwNumberOfBytesRead指向0,则文件已经读到了文件的末尾。
4
InternetConnet函数连接到一个HTTP,FTP或Gopher服务器:
HINTERNET hConnect = ::InternetConnect(
hSession, //1 HINTERNET hInternetSession
"www.microsoft.com", //2 LPCTSTR lpszServerName
INTERNET_INVALID_PORT_NUMBER,//3 INTERNET_PORT nServerPort
"", //4 LPCTSTR lpszUsername
"", //5 LPCTSTR lpszPassword
INTERNET_SERVICE_HTTP, //6 DWORD dwService
0, //7 DWORD dwFlags
O //8 DWORD dwContext
) ;
第六个参数dwService决定服务类型(HTTP,FTP或Gopher)。第二个参数(设置成 www.microsoft.com)提供了服务器的地址。第一个参数hInternetSession是从InternetOpen返回的句柄。第四个、第五个参数提供一个用户姓名和密码 。这七个参数没有控制任何标志影响HTTP操作。最后一个参数为状态回调函数提供前后关系的信息。
InternetConnet函数连接到一个HTTP,FTP或Gopher服务器:
HINTERNET hConnect = ::InternetConnect(
hSession, //1 HINTERNET hInternetSession
"www.microsoft.com", //2 LPCTSTR lpszServerName
INTERNET_INVALID_PORT_NUMBER,//3 INTERNET_PORT nServerPort
"", //4 LPCTSTR lpszUsername
"", //5 LPCTSTR lpszPassword
INTERNET_SERVICE_HTTP, //6 DWORD dwService
0, //7 DWORD dwFlags
O //8 DWORD dwContext
) ;
第六个参数dwService决定服务类型(HTTP,FTP或Gopher)。第二个参数(设置成 www.microsoft.com)提供了服务器的地址。第一个参数hInternetSession是从InternetOpen返回的句柄。第四个、第五个参数提供一个用户姓名和密码 。这七个参数没有控制任何标志影响HTTP操作。最后一个参数为状态回调函数提供前后关系的信息。
5
HttpOpenRequest创建一个请求句柄并且把参数存储在句柄中。HINTERNET hHttpFile = ::HttpOpenRequest(
hConnect, // 1 HINTERNET hHttpSession
"GET", // 2 LPCTSTR lpszVerb
"/MSDN/MSDNINFO/", // 3 LPCTSTR lpszObjectName
HTTP_VERSION, // 4 LPCTSTR lpszVersion
NULL, // 5 LPCTSTR lpszReferer
0, // 6 LPCTSTR FAR * lplpszAcceptTypes
INTERNET_FLAG_DONT_CACHE, // 7 DWORD dwFlags
0 // 8 DWORD dwContext
) ;
HttpOpenRequest的第一个参数是由InternetConnet返回的HINTERNET。HttpOpenRequest的第七和第八个参数执行与InternetConnect中有相同名字的参数一样的功能。
第 二个参数(“GET”)指定想要得到由第三个参数(“/MSDN/MSDNINFO/”)命名的对象。HTTP版已经传递第四个参数;现在,它肯定是 HTTP VERSION。因为“GET”是最流行的动词类型,HttpOpenRequest将为这个参数接收一个空指针。
第五个参数lpszReferer是一个网点的地址。这个值可以为空。第六个参数执行一个程序接收的文件类型列表。把空值传递给HttpOpenRequest即通知了服务器只有文本文件可以被接收。
6
HttpSendRequest把请求参数送到HTTP服务器。
除了传送请求外,HttpSendRequest允许传送额外的HTTP标题给服务器。关于HTTP标题的信息可以在 http://www.w3.org/ 上的最新的说明上找到。
BOOL bSendRequest = ::HttpSendRequest(
hHttpFile, // 1 HINTERNET hHttpRequest
NULL, // 2 LPCTSTR lpszHeaders
0, // 3 DWORD dwHeadersLength
0, // 4 LPVOID lpOptional
0 // 5 DWORD dwOptionalLength
);
HttpOpenRequest创建一个请求句柄并且把参数存储在句柄中。HINTERNET hHttpFile = ::HttpOpenRequest(
hConnect, // 1 HINTERNET hHttpSession
"GET", // 2 LPCTSTR lpszVerb
"/MSDN/MSDNINFO/", // 3 LPCTSTR lpszObjectName
HTTP_VERSION, // 4 LPCTSTR lpszVersion
NULL, // 5 LPCTSTR lpszReferer
0, // 6 LPCTSTR FAR * lplpszAcceptTypes
INTERNET_FLAG_DONT_CACHE, // 7 DWORD dwFlags
0 // 8 DWORD dwContext
) ;
HttpOpenRequest的第一个参数是由InternetConnet返回的HINTERNET。HttpOpenRequest的第七和第八个参数执行与InternetConnect中有相同名字的参数一样的功能。
第 二个参数(“GET”)指定想要得到由第三个参数(“/MSDN/MSDNINFO/”)命名的对象。HTTP版已经传递第四个参数;现在,它肯定是 HTTP VERSION。因为“GET”是最流行的动词类型,HttpOpenRequest将为这个参数接收一个空指针。
第五个参数lpszReferer是一个网点的地址。这个值可以为空。第六个参数执行一个程序接收的文件类型列表。把空值传递给HttpOpenRequest即通知了服务器只有文本文件可以被接收。
6
HttpSendRequest把请求参数送到HTTP服务器。
除了传送请求外,HttpSendRequest允许传送额外的HTTP标题给服务器。关于HTTP标题的信息可以在 http://www.w3.org/ 上的最新的说明上找到。
BOOL bSendRequest = ::HttpSendRequest(
hHttpFile, // 1 HINTERNET hHttpRequest
NULL, // 2 LPCTSTR lpszHeaders
0, // 3 DWORD dwHeadersLength
0, // 4 LPVOID lpOptional
0 // 5 DWORD dwOptionalLength
);
7
为了得到关于文件的信息,在调用HttpSendRequest后使用 HttpQueryInfo函数:
BOOL bQuery = ::HttpQueryInfo(
hHttpFile, // 1 HINTERNET hHttpRequest
HTTP_QUERY_CONTENT_LENGTH, // 2 DWORD dwInfoLevel
bufQuery, // 3 LPVOID lpvBuffer
&dwLengthBufQuery // 4 LPDWORD lpdwBufferLength
) ;
查询的结构是字符串或lpvBuffer中的字符串列表。HTTP_QUERY_CONTENT_LENGTH查询得到文件的长度。可以使用HttpQueryInfo查询大范围的信息。
为了得到关于文件的信息,在调用HttpSendRequest后使用 HttpQueryInfo函数:
BOOL bQuery = ::HttpQueryInfo(
hHttpFile, // 1 HINTERNET hHttpRequest
HTTP_QUERY_CONTENT_LENGTH, // 2 DWORD dwInfoLevel
bufQuery, // 3 LPVOID lpvBuffer
&dwLengthBufQuery // 4 LPDWORD lpdwBufferLength
) ;
查询的结构是字符串或lpvBuffer中的字符串列表。HTTP_QUERY_CONTENT_LENGTH查询得到文件的长度。可以使用HttpQueryInfo查询大范围的信息。
此外,wininet中还有其他协议的函数,比如一系列FTP协议的函数
FtpCreateDirectory
FtpDeleteFile
FtpFindFirstFile
FtpGetCurrentDirectory
FtpGetFile
FtpOpenFile
FtpPutFile
FtpRemoveDirectory
FtpRenameFile
FtpSetCurrentDirectory