天天看點

WIN32 API - http程式設計

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;

}

繼續閱讀