程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> VC通過HTTP方式獲取網頁

VC通過HTTP方式獲取網頁

編輯:vc教程

在VC中通過HTTP方式獲取網頁,我試過好幾種方式,但是都有問題,現將我用的兩種雖然也有問題但基本可以實現的方式寫出來,如果大家有更好的方式或者能解決我所遇到的問題,請告訴我:QQ158792331,郵箱:[email protected]

第一種:

首先要包含這個頭文件:#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+" ";    //因為每次只能讀取一行,所以要循環讀取數據
  }
  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中國的網頁能正常顯示,其他的頁面都是亂碼,本想將返回值重新編碼,但水平所限,我沒有成功,如果誰解決了這個問題,不要忘記告訴我啊

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved