如何通過VC的 CHttpFile 抓取網頁內容

在點擊一個按鈕時開始請求你輸入的地址。
void CHttpFileDlg::OnButton1() 
{
   CString url;
   GetDlgItemText(IDC_EDIT1,url); // IDC_EDIT1 是一個輸入框的名字。
   char* headers="Accept:*/*\r\nAccept-Language:zh-cn\r\nUser-Agent:VCTestClient\r\n";
   CInternetSession Sess;
   CHttpFile* cFile = (CHttpFile*)Sess.OpenURL(url,1,INTERNET_FLAG_TRANSFER_ASCII||INTERNET_FLAG_RELOAD,headers,strlen(headers));

   DWORD dwStatusCode;
   cFile->QueryInfoStatusCode(dwStatusCode);
   if(dwStatusCode == HTTP_STATUS_OK)
   {
     CString szData,szAllData;
     while(cFile->ReadString(szData))
     {
       szAllData += szData;
       szAllData += "\r\n";
     }

     cFile->Close();
     Sess.Close();
     CString name = GetFileName(url,TRUE);
     CFile file(name, CFile::modeCreate | CFile::modeWrite);
     file.Write(szAllData,szAllData.GetLength());
     file.Close();
   }
   else
   {
     MessageBox("請求失敗。。。。");
   }

}

 
下面是獲取請求的文件名,在另存到本地時用同樣的文件名。
CString CHttpFileDlg::GetFileName(CString FileName, BOOL Ext)
{   
   int Where;   
   Where = FileName.ReverseFind('\\');  
   if (Where == -1)  
     Where = FileName.ReverseFind('/');  
   CString FileTitle = FileName.Right(FileName.GetLength() - 1 - Where);  
   if (!Ext)  
   {  
     int Which = FileTitle.ReverseFind('.');   
     if (Which != -1)   
       FileTitle = FileTitle.Left(Which);   
   }
   return FileTitle;   
}
 
如下圖:
CHttpFile 應用程序
 
小結:
在此程序中我認識了三個類的應用,一個是CHttpFile、另一個是CFile、還有一也是最爲關鍵的CInternetSession。
CFile: 類CFile是基類的Microsoft基礎類檔案。它直接提供無緩衝,二進制磁盤輸入/輸出服務,並間接支持文本文件和存儲的文件通過其派生類。 CFile工程與CArchive類支持序列化的Microsoft基礎類物體。
 
CHttpFile:類CHttpFile規定的功能要求,並宣讀文件HTTP服務器上的。如果您的互聯網會議上讀取數據的一個HTTP服務器,您必須創建一個實例CHttpFile 。
 
CInternetSession: 使用類CInternetSession創建和初始化一個或幾個同時互聯網會話,如有必要,來描述您的連接到代理服務器。如果您的Internet連接必須保持期限的申請,您可以創建一個CInternetSession成員類CWinApp 。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章