项目里面用到了获取网页数据,需要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;
}
希望能对需要的朋友有帮助。