请问如何在VC中实现HTTP下载,无需弹出选择下载路径对话框,在程序中制定下载目录即可

解决方案 »

  1.   

    bool SaveUrl(LPCTSTR url, LPCTSTR filename)
    {
    HINTERNET hNet = ::InternetOpen("Outlook",
    PRE_CONFIG_INTERNET_ACCESS,
    NULL,
    INTERNET_INVALID_PORT_NUMBER,
    0) ; HINTERNET hUrlFile = ::InternetOpenUrl(hNet,
    url,
    NULL,
    0,
    INTERNET_FLAG_RELOAD,
    0) ; char buffer[10*1024] ;
    DWORD dwBytesRead = 1;
    BOOL bRead=TRUE;
    CFile file;
    file.Open(filename,CFile::modeCreate|CFile::modeWrite);
    while(bRead&&dwBytesRead>0)
    {
    bRead = ::InternetReadFile(hUrlFile,
    buffer,
    sizeof(buffer),
    &dwBytesRead);
    if(dwBytesRead>0)
    file.Write(buffer,dwBytesRead);
    }
    ::InternetCloseHandle(hUrlFile) ;
    ::InternetCloseHandle(hNet) ;
    file.Close();
    AfxMessageBox("finished");
    return bRead;
    }
      

  2.   

    //Download http file through proxy
    //--------------------------------------------------------------------------------
    We can find details about Proxy Authentication and Sever Authentication methed in MSDN.
    Just search for the keyword "INTERNET_OPTION_USERNAME".
    Here I give a very simple example. It works in my project.
    CString GeHttptFile(const char *url)
    {
    CString szContent;
    char strProxyList[MAX_PATH], strUsername[64], strPassword[64];
    //in this case "proxya" is the proxy server name, "8080" is its port
    strcpy(strProxyList, "proxya:8080");
    strcpy(strUsername, "myusername");
    strcpy(strPassword, "mypassword");
    DWORD dwServiceType = AFX_INET_SERVICE_HTTP;
    CString szServer, szObject;
    INTERNET_PORT nPort;
    AfxParseURL(url, dwServiceType, szServer, szObject, nPort);
    CInternetSession mysession;
    CHttpConnection* pConnection;
    CHttpFile* pHttpFile;
    pConnection = mysession.GetHttpConnection(szServer,
    INTERNET_FLAG_KEEP_CONNECTION,
    INTERNET_INVALID_PORT_NUMBER,
    NULL, NULL);
    pHttpFile = pConnection->OpenRequest("GET", szObject,
     NULL, 0, NULL, NULL,
     INTERNET_FLAG_KEEP_CONNECTION);
    //here for proxy
    INTERNET_PROXY_INFO proxyinfo;
    proxyinfo.dwAccessType = INTERNET_OPEN_TYPE_PROXY;
    proxyinfo.lpszProxy = strProxyList;
    proxyinfo.lpszProxyBypass = NULL;
    mysession.SetOption(INTERNET_OPTION_PROXY, (LPVOID)&proxyinfo, sizeof(INTERNET_PROXY_INFO));
    pHttpFile->SetOption(INTERNET_OPTION_PROXY_USERNAME, strUsername, strlen(strUsername)+1);
    pHttpFile->SetOption(INTERNET_OPTION_PROXY_PASSWORD, strPassword, strlen(strPassword)+1); pHttpFile->SendRequest(NULL);
    DWORD nFileSize = pHttpFile->GetLength();
    LPSTR rbuf = szContent.GetBuffer(nFileSize);
    UINT uBytesRead = pHttpFile->Read(rbuf, nFileSize);
    szContent.ReleaseBuffer();
    pHttpFile->Close();
    delete pHttpFile;
    pConnection->Close();
    delete pConnection;
    mysession.Close();
    return szContent;
    }
      

  3.   

    http://www.codeguru.com/ieprogram/SaveWholePage.html
      

  4.   

    非常感谢,第一段代码正是我所要的
    但是链接时为什么链接不到internetopen,internetclosehandle等5个函数?