VC通过HTTP方式获取网页

来源:互联网 发布:安徽网络电视台海豚tv 编辑:程序博客网 时间:2024/05/17 03:17
 VC中通过HTTP方式获取网页,我试过好几种方式,但是都有问题,现将我用的两种虽然也有问题但基本可以实现的方式写出来,如果大家有更好的方式或者能解决我所遇到的问题,请告诉我:QQ158792331,邮箱:werther161@yahoo.com.cn

第一种:

首先要包含这个头文件:#include <afxinet.h>

  CInternetSession mySession;
  CHttpFile* myHttpFile=NULL;
  CString myData;

//must include either INTERNET_FLAG_TRANSFER_ASCII or INTERNET_FLAG_TRANSFER_BINARY, but not both
  myHttpFile=(CHttpFile*)mySession.OpenURL(url,1,INTERNET_FLAG_TRANSFER_ASCII,NULL,0);
   DWORD dwStatusCode;  
    pfile -> QueryInfoStatusCode(dwStatusCode);  
    if(dwStatusCode == HTTP_STATUS_OK)  
    {  
        CString content="";  
        CString data;  
        while (pfile -> ReadString(data))  
        {  
          content+=data;
        }    
  MessageBox(content);
    }   
    pfile -> Close();  
    delete pfile;  
    session.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中国的网页能正常显示,其他的页面都是乱码,本想将返回值重新编码,但水平所限,我没有成功,如果谁解决了这个问题,不要忘记告诉我啊

 

第三种 :

    代码如下:

 CString postBuffer;
 CInternetSession session("Mozilla/5.0");
 CHttpConnection* pServer = NULL;
 CHttpFile* pFile = NULL;
 CString m_sUrl;
// INTERNET_PORT nPort = 80;
 pServer = session.GetHttpConnection("www.baidu.com");//好像只能这么写
pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_GET,m_sUrl,"http://www.baidu.com");

 pFile -> AddRequestHeaders("Content-Type: application/x-www-form-urlencoded");
pFile->AddRequestHeaders("Content-Type: multipart/form-data;/r/n");

 pFile -> AddRequestHeaders("Accept: */*");

 pFile -> SendRequest(NULL, 0, LPVOID(postBuffer.GetBuffer()), postBuffer.GetLength());

 // you can read from the file after this


CString content="";
CString smsg;
while(pFile->ReadString(smsg)>0)//read ten line of returned HTML,you need to edit this to use the result
 {
 content+=smsg; 
 }//
 MessageBox(content);
 delete pFile;
 pFile = NULL;
 delete pServer;
 pServer = NULL;
 session.Close();

原创粉丝点击