1. 一般的步驟是,首先通過InternetOpen()函數建立位于根部的HINTERNET句柄,然後才能進一步建立HTTP、FTP會話,使用InternetConnect()函數建立一個指定的會話,初始化HTTP、FTP會話(根據指定的參數決定),并建立一個根句柄的分支,HttpOpenRequest()、FtpOpenFile()、FtpFindFirstFile()等函數将使用InternetConnect()所建立的句柄,建立到指定站點的連接配接。例子代碼如下:
bool testHttpDownload()
{
// 建立會話
HINTERNET hInternet;
hInternet = InternetOpen("", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
if(hInternet == NULL) return false;
// 建立連接配接
HINTERNET hConnect;
hConnect = InternetConnect(hInternet, "hi.baidu.com", INTERNET_INVALID_PORT_NUMBER,
"", "", INTERNET_SERVICE_HTTP, INTERNET_FLAG_PASSIVE, 0);
if( hInternet == NULL )
{
InternetCloseHandle(hInternet);
return false;
}
HINTERNET httpFile;
httpFile = HttpOpenRequest(hConnect, "GET", "vc_net/blog/item/2d830208fe388bc063d986b2.html", HTTP_VERSION, NULL, 0, INTERNET_FLAG_NO_UI | INTERNET_FLAG_DONT_CACHE, 1);
if(httpFile == NULL)
{
InternetCloseHandle(hConnect);
InternetCloseHandle(hInternet);
return false;
}
HttpSendRequest(httpFile, NULL, NULL, 0, 0);
char buf[1024];
DWORD buf_len = 1024;
DWORD buf_read = 1024;
FILE *fp = fopen("e:\\test.txt", "wb");
while(1)
{
InternetReadFile(httpFile, buf, buf_len, &buf_read);
if(buf_read == 0) break;
fwrite(buf, 1, buf_read, fp);
}
fclose(fp);
InternetCloseHandle(httpFile);
InternetCloseHandle(hConnect);
InternetCloseHandle(hInternet);
return true;
}