VC通过HTTP方式获取网页

来源:互联网 发布:js高手进阶之路 编辑:程序博客网 时间:2024/05/17 04:28
在VC中通过HTTP方式获取网页,我试过好几种方式,但是都有问题,现将我用的两种虽然也有问题但基本可以实现的方式写出来,如果大家有更好的方式或者能解决我所遇到的问题,请告诉我:QQ158792331,邮箱:werther161@yahoo.com.cn
  第一种:
  首先要包含这个头文件:#include <afxinet.h>
   CInternetSession mySession;
   CHttpFile* myHttpFile=NULL;
   CString myData;
   myHttpFile=(CHttpFile*)mySession.OpenURL(url,1,INTERNET_FLAG_DONT_CACHE,NULL,0);
   for(int i=0;i<20&&myHttpFile->ReadString(myData);i++)
   {
   strXMLReturn+=myData+"/r/n"; //因为每次只能读取一行,所以要循环读取数据
   }
   myHttpFile->Close();
   delete []myHttpFile;
   mySession.Close();
  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 使用二进制数据
  不知道为什么这个函数当只用一个或者两个参数时不会报错,用三个或者按原形就会报错,但是用一个或者两个当页面更新时,不能获取到最新的数据(默认总是先检查缓存是否有要的数据)
  第二种:
  首先引用:
  #import <msxml4.dll> named_guids
  using namespace MSXML2;
  CString resaa;
  IXMLHTTPRequestPtr httpRes;
   HRESULT hr=httpRes.CreateInstance("MSXML2.XMLHTTP");
   if(!SUCCEEDED(hr))
   {
   AfxMessageBox("无法创建XMLHTTP对象,请检查是否安装了MS XML运行库!");
   }
  LPCTSTR url="http://localhost/changjun/asxml.asp";
   httpRes->open("Get",url,false,"","");
   httpRes->send();
   if((httpRes->readyState)==4) //4时表示数据已加载完
   {
   resaa=httpRes->responseText.copy();
   }
   httpRes.Release();
  用这种方式返回值的默认编码方式为UTF-8,所以除了Google中国的网页能正常显示,其他的页面都是乱码,本想将返回值重新编码,但水平所限,我没有成功,如果谁解决了这个问题,不要忘记告诉我啊 
原创粉丝点击