HTTP下载文件

bool CWinpcapGetURL::DownLoadWBList(LPCSTR ServerName, LPCSTR lpObject, int nPort)//下载黑白名单
{
    HINTERNET hSession = NULL;
    HINTERNET hConnect = NULL;
    
    DWORD dwBytesRead = 0;
    char * pBuffer;
    FILE* hWDListFile;
    HINTERNET hRequest=NULL;
    
    hSession = InternetOpen("HttpSendRequest",INTERNET_OPEN_TYPE_DIRECT,NULL,NULL,0);
    if(!hSession){
        goto quit;
    }
    
    hConnect = InternetConnect(hSession, ServerName, nPort, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1);
    if(!hConnect)
    {
        goto quit;
    }
    
    hRequest = HttpOpenRequest (hConnect, "GET", lpObject, NULL, NULL, NULL, INTERNET_FLAG_NO_CACHE_WRITE, 0);
    if (!hRequest)
    {
        goto quit;
    }
    
    {        
        BOOL bSendRequest = ::HttpSendRequest(hRequest,   NULL,   0,   0,   0);   
        
        //Get the length of the file.   
        char bufQuery[32];   
        DWORD dwLengthBufQuery = sizeof(bufQuery);   
        BOOL bQuery = ::HttpQueryInfo(hRequest,   HTTP_QUERY_CONTENT_LENGTH,bufQuery,&dwLengthBufQuery,NULL);         
        DWORD dwFileSize = (DWORD)atol(bufQuery);   
        
        pBuffer = new char[dwFileSize+1]; 
        if(!InternetReadFile(hRequest, pBuffer, dwFileSize+1, &dwBytesRead))
        {
            goto quit;
        }
        if( dwBytesRead == 0)
            goto quit;
        
        pBuffer[dwBytesRead] = 0;
        string s_WDListFile = CGlobalTools::g_szCurrentDirectory;
        s_WDListFile.append("WBListCache.bak");
        hWDListFile = fopen(s_WDListFile.c_str(),"w+");
        
        DWORD dWriteSize = fwrite(pBuffer,1,dwBytesRead,hWDListFile);
    }
    
quit:
    if(hSession)
        InternetCloseHandle(hSession);
    if(hRequest)
        InternetCloseHandle(hRequest);
    if (hConnect)
        InternetCloseHandle(hConnect);    
    if (hWDListFile != NULL )
        fclose(hWDListFile);    
    if (pBuffer)
    {
        delete[] pBuffer;
        pBuffer = NULL;
    }
    return true;
}

 

你可能感兴趣的:(http)