在点击一个按钮时开始请求你输入的地址。


void CHttpFileDlg::OnButton1() 

{

   CString url;

   GetDlgItemText(IDC_EDIT1,url); // IDC_EDIT1 是一个输入框的名字。

   char* headers="Accept:*/*\r\nAccept-Language:zh-cn\r\nUser-Agent:VCTestClient\r\n";

   CInternetSession Sess;

   CHttpFile* cFile = (CHttpFile*)Sess.OpenURL(url,1,INTERNET_FLAG_TRANSFER_ASCII||INTERNET_FLAG_RELOAD,headers,strlen(headers));

   DWORD dwStatusCode;

   cFile->QueryInfoStatusCode(dwStatusCode);

   if(dwStatusCode == HTTP_STATUS_OK)

   {

     CString szData,szAllData;

     while(cFile->ReadString(szData))

     {

       szAllData += szData;

       szAllData += "\r\n";

     }

     cFile->Close();

     Sess.Close();

     CString name = GetFileName(url,TRUE);

     CFile file(name, CFile::modeCreate | CFile::modeWrite);

     file.Write(szAllData,szAllData.GetLength());

     file.Close();

   }

   else

   {

     MessageBox("请求失败。。。。");

   }

}


 


下面是获取请求的文件名,在另存到本地时用同样的文件名。


CString CHttpFileDlg::GetFileName(CString FileName, BOOL Ext)

{   

   int Where;   

   Where = FileName.ReverseFind('\\');  

   if (Where == -1)  

     Where = FileName.ReverseFind('/');  

   CString FileTitle = FileName.Right(FileName.GetLength() - 1 - Where);  

   if (!Ext)  

   {  

     int Which = FileTitle.ReverseFind('.');   

     if (Which != -1)   

       FileTitle = FileTitle.Left(Which);   

   }

   return FileTitle;   

}


 


如下图:



 


小结:


在此程序中我认识了三个类的应用,一个是CHttpFile、另一个是CFile、还有一也是最为关键的CInternetSession。


CFile: 类CFile是基类的Microsoft基础类档案。它直接提供无缓冲,二进制磁盘输入/输出服务,并间接支持文本文件和存储的文件通过其派生类。 CFile工程与CArchive类支持序列化的Microsoft基础类物体。


 



CHttpFile:类CHttpFile规定的功能要求,并宣读文件HTTP服务器上的。如果您的互联网会议上读取数据的一个HTTP服务器,您必须创建一个实例CHttpFile 。


 


CInternetSession: 使用类CInternetSession创建和初始化一个或几个同时互联网会话,如有必要,来描述您的连接到代理服务器。如果您的Internet连接必须保持期限的申请,您可以创建一个CInternetSession成员类CWinApp 。