項目裏面用到了獲取網頁數據,需要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;
}
希望能對需要的朋友有幫助。