VC++6.0 通过HTTP方式获取网页

来源:互联网 发布:下载美图软件 编辑:程序博客网 时间:2024/05/04 17:54
 最近做了个项目,用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;
}

希望能对需要的朋友有帮助。