VC++6.0 通過HTTP方式獲取網頁

 最近做了個項目,用VC開發,很有技術難度,習慣了Java開發,VC都忘差不多啦,呵呵~ 爲了吃飯,硬着頭皮也得做下去啊。
項目裏面用到了獲取網頁數據,需要http header 來驗證客戶端合法性,找了些資料,都有問題。還是自己寫吧,用 CInternetSession

//頭部包含afxinet.h
 #include <afxinet.h>

CInternetSession::OpenURL函數原型爲:

CStdioFile* OpenURL( LPCTSTR pstrURL, //文件URL地址
  DWORD dwContext = 1, //上下文ID
  DWORD dwFlags = INTERNET_FLAG_TRANSFER_ASCII, //標記
  LPCTSTR pstrHeaders = NULL, //發送到服務器的數據頭
  DWORD dwHeadersLength = 0 );//發送到服務器的數據頭長度

dwFlags可以爲:
INTERNET_FLAG_RELOAD 強制重讀數據
INTERNET_FLAG_DONT_CACHE 不保存到緩存
INTERNET_FLAG_TRANSFER_ASCII 使用文本數據
INTERNET_FLAG_TRANSFER_BINARY 使用二進制數據

//獲取網頁的方法代碼如下
CString getURLContext(LPCTSTR pstrURL)
{
 //自定義http頭信息
 char* headers="Accept:*/*/r/n"
  "Accept-Language:zh-cn/r/n"
  "User-Agent:VCTestClient/r/n";

 CString m_strHTML;
 try
 {
  CInternetSession sess;//建立會話
  CHttpFile* pF=(CHttpFile*)sess.OpenURL(pstrURL,1,INTERNET_FLAG_TRANSFER_ASCII||INTERNET_FLAG_RELOAD,headers,strlen(headers));//打開文件
  注意:OpenURL 方法的dwFlags參數 必須選擇傳輸模式爲INTERNET_FLAG_TRANSFER_ASCII 或者 INTERNET_FLAG_TRANSFER_BINARY
  CString szData,szAllData;
  while(pF->ReadString(szData))
  {
   //讀取文件
   szAllData+="/r/n";
   szAllData+=szData;
  }
  pF->Close();
  sess.Close();
  m_strHTML=szAllData;
 }
 catch(CException *e)
 {
  AfxMessageBox("獲取數據失敗");
 }
 return m_strHTML;
}

希望能對需要的朋友有幫助。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章