C++ 如何调用IE浏览器 下载文件,要求传入 保存路径 文件名

2025-12-16 23:23:38
推荐回答(1个)
回答1:

#include 
#include 
#include 
#define MAXBLOCKSIZE 1024
#pragma comment(lib,"Wininet.lib")

void download(const char*);

int main(int argc, char* argv[]){
    if(1){
        download("http://zhangmenshiting.baidu.com/data2/music/34134159/228850122400320.mp3?xcode=d1747e89d6b430d353ead645e726a219ad8249889b5b4c90");
    }else{
        printf("Usage: auto-Update url");
    }
    return 0;
}


/**
* 执行 文件下载 操作
* @param Url: The target action url
*
*/
void download(const char *Url)
{
    HINTERNET hSession = InternetOpen("IE", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
    if (hSession != NULL)
    {
        HINTERNET handle2 = InternetOpenUrl(hSession, Url, NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);
        if (handle2 != NULL)
        {
            printf("%s\n",Url);
            byte Temp[MAXBLOCKSIZE];
            ULONG Number = 1;
            
            FILE *stream;
            if( (stream = fopen( "F:fhcq.mp3", "wb" )) != NULL )//凤凰传奇-自由飞翔
            {
                printf("open success\n");
                while (Number > 0)
                {
                    InternetReadFile(handle2, Temp, MAXBLOCKSIZE - 1, &Number);
                    //fprintf(stream, (const char*)Temp);
                    fwrite(Temp, sizeof (char), Number , stream);
                }
                fclose( stream );
            }
            
            InternetCloseHandle(handle2);
            handle2 = NULL;
        }
        InternetCloseHandle(hSession);
        hSession = NULL;
        printf("download success\n");
    }
}