VC通过HTTP方式获取网页

王朝vc·作者佚名  2006-01-10
窄屏简体版  字體: |||超大  

在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中国的网页能正常显示,其他的页面都是乱码,本想将返回值重新编码,但水平所限,我没有成功,如果谁解决了这个问题,不要忘记告诉我啊

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航