VC使用HTTP协议下载文件
生活随笔
收集整理的這篇文章主要介紹了
VC使用HTTP协议下载文件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
//
//功能:從網上下載文件并保存到本地
/
int CMyFun::InternetGetFile(CString szUrl, CString szFileName)
{
?? ?szUrl.Format("%s",_T("http://www.houg.cn/Download/houggame.exe"));
??? DWORD dwFlags;
?? ?//返回本地系統的網絡連接狀態。
?? ?/*
?? ?INTERNET_CONNECTION_LAN????????? 局域網
?? ?INTERNET_CONNECTION_MODEM??????? 撥號上網
?? ?INTERNET_CONNECTION_PROXY??????? 代理
?? ?INTERNET_CONNECTION_MODEM_BUSY?? 代理被占用
?? ?INTERNET_CONNECTION_CONFIGURED?? 雖然可以聯網,但當前不可用
?? ?INTERNET_CONNECTION_OFFLINE 離線
?? ?INTERNET_RAS_INSTALLED RAS安裝
?? ?*/
?? ?bool bInternet=InternetGetConnectedState(&dwFlags, 0);
?? ?if (!bInternet)
?? ?{
?? ??? ?AfxMessageBox(_T("當前計算機連接公網失敗"));
?? ?}
?? ?//這個必須得這樣寫
?? ?//BOOL bConnected = InternetCheckConnection(szUrl, FLAG_ICC_FORCE_CONNECTION, 0);
?? ?BOOL bConnected = InternetCheckConnection(_T("http://www.houg.cn"), FLAG_ICC_FORCE_CONNECTION, 0);
?? ?if (!bConnected)
?? ?{
?? ??? ?AfxMessageBox(_T("服務器未開啟"));
?? ?}
?? ?/*
?? ?InternetOpen:
?? ?函數作用:初始化一個應用程序,以使用WinINet 函數。
?? ?參數一:指向一個空結束的字符串,該字符串指定的應用程序或實體調用WinInet函數的名稱。使用此名稱作為用戶代理的HTTP協議。
?? ?*/
?? ?CHAR strAgent[64];
?? ?memset(strAgent,0,sizeof(strAgent));
?? ?sprintf(strAgent, "Agent%ld", timeGetTime());
?? ?HINTERNET hOpen;
?? ?if(!(dwFlags & INTERNET_CONNECTION_PROXY))
?? ??? ?hOpen = InternetOpen(strAgent, INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY, NULL, NULL, 0);
?? ?else
?? ??? ?hOpen = InternetOpen(strAgent, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
?? ?if(!hOpen)
?? ?{
?? ??? ?return -1;
?? ?}
?? ?DWORD dwSize;
?? ?CHAR?? szHead[] = "Accept: */*\r\n\r\n";
?? ?VOID* szTemp[16384];
?? ?HINTERNET? hConnect;
?? ?CFile file;
?? ?/*InternetOpenUrl:
?? ?函數作用:通過一個完整的FTP,Gopher或HTTP網址打開一個資源。
?? ?*/
?? ?if ( !(hConnect = InternetOpenUrl( hOpen, szUrl, szHead,
?? ??? ? lstrlenA (szHead), INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_PRAGMA_NOCACHE | INTERNET_FLAG_RELOAD, 0)))
?? ?{
?? ??? ?InternetCloseHandle(hOpen);
?? ???? return -1;
?? ?}
?? ?if? (file.Open(szFileName,CFile::modeWrite|CFile::modeCreate)==FALSE )
?? ?{
?? ?? return -1;
?? ?}
?? ?DWORD dwByteToRead = 0;
?? ?DWORD dwSizeOfRq = 4;
?? ?DWORD dwBytes = 0;
?? ?/*HttpQueryInfo函數:
?? ?服務器會把該文件信息返回給你,其中包括大小啊、更新時間啊(如果有更新時間的話)、類型啊等等
?? ?*/
??? if (!HttpQueryInfo(hConnect, HTTP_QUERY_CONTENT_LENGTH | HTTP_QUERY_FLAG_NUMBER,
????????????????? (LPVOID)&dwByteToRead, &dwSizeOfRq, NULL))
?? ?{
?? ??? ?dwByteToRead = 0;
?? ?}
?? ?memset(szTemp,0,sizeof(szTemp));
?? ?do
?? ?{
?? ??? ?if (!InternetReadFile (hConnect, szTemp, 16384,? &dwSize))//每次傳16KB
?? ??? ?{
?? ??? ??? ?file.Close();
?? ??? ??? ?return -1;
?? ??? ?}
?? ??? ?if (dwSize==0)
?? ??? ??? ?break;
?? ??? ?else
?? ??? ??? ?file.Write(szTemp,dwSize);
?? ??? ?
?? ?}while (TRUE);
?? ?file.Close();
?? ?InternetCloseHandle(hConnect);
?? ?InternetCloseHandle(hOpen);
?? ?return 0;
}
總結
以上是生活随笔為你收集整理的VC使用HTTP协议下载文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++使用MD5
- 下一篇: GlobalAlloc全局内存的使用