比如我在google里面搜索gmail,返回地址为:http://www.google.com/search?hl=zh-CN&ie=UTF-8&q=gmail&lr=然后我该如何把这个地址对应的网页下载到本地?

解决方案 »

  1.   

    //比较简单的做法#include<afxinet.h>void CWinInetTestDlg::OnBnClickedButton()
    {
    // TODO: 在此添加控件通知处理程序代码 CString strURL = "http://www.google.com/search?hl=zh-CN&ie=UTF-8&q=gmail&lr="; //网址
    CStdioFile sF("C:\\Save.htm", CFile::modeCreate | CFile::modeWrite); //本地存盘路径 CInternetSession sess;
    CHttpFile* pF=(CHttpFile*)sess.OpenURL(strURL); CString szData;
    while(pF->ReadString(szData))
    {
    szData += "\r\n";
    sF.Write(szData, szData.GetLength());
    }
    }
      

  2.   

    谢谢楼上的如果我要用SDK的话,怎么写呢?郁闷中
      

  3.   

    sdk:按照http 协议写把,不知道了,up
      

  4.   

    要组件解析http协议,Get方法,解析Content后面的数据,好像就是所得到的内容,具体看看吧,好久以前写过,很简单的。
      

  5.   

    组件->自己,sorry,笔误!
      

  6.   

    用VC读取网页、GET方式发送数据下一页:POST方式发送数据中文网址自助系统提供用户一个用中文访问互联网的选择。用户可以自己定义自己喜欢的中文网站名字。详见http://www.fadshop.net/curl。还可参看《中文域名的现状》这里介绍用WinINet方法实现网页的读取。第一部分是用GET方式,第二部分用POST方式。GET方式和POST方式是向网页发送数据的两种方式,他们之间的详细差异你可以查阅RFC文档,但简单说来,你读取“http://server/cgi.dll?a=1&b=2&c=3&d=4”这一页时,你就往“http://server/cgi.dll”这个网页用GET方式发送了a=1,b=2,c=3,d=4这几个数值。回头来说MFC中关于网络传输的几个类,CInternetSession和CHttpFile; CHttpFile是CStdioFile的子类,只要把网络上的一个文件用CHttpFile打开了,就可以象CStdioFile一样ReadString了,所以只要用CInternetSession类打开这个文件就可以了。以下程序是中文网址自助系统在从网上查找新模板并导入的源程序。程序先用sess.OpenURL(strFileName)取得句柄,然后用fileGet->QueryInfo来查找是否存在该文件。根据HTTP协议,如果存在此文件并且一切正常,返回值就会在200-300之间。剩下的事情就是正常的文本文件的读写: 
    while(fileGet->ReadString(strSentence))
    fileWrite.WriteString(strSentence+"\n");
    fileWrite.Close();
    掌握了读取网页的技术,同时也就能够用GET方式来发送数据了,例如把strWriteName改成“progsave.asp?curl=中国人&http=http://www.chinaren.com” 你就能够向松鼠之家提交你的中文网址。可是,GET方式来发送数据有一个限制,就是发送的数据不能太长。具体数值我没有查到,但是当strWriteName的长度大于3000字节时就会出错。为了让用户一次能传送更多的中文网址,我采取了POST的方式发送。当然, POST方式同样也有长度限制,但是比起GET更长得多。请看下一页: 用POST方式发送数据以下程序在NT4,VISUAL C6.0上调试通过。 
    CString strWriteName="Template01.htm"
    #ifndef _DEBUG
        strFileName="http://www.fadshop.net/curl/" + strWriteName;
    #else    //如果是DEBUG版本就在本机的IIS上读取。
        strFileName="http://mycomputer/fadshop/curl/" + strWriteName;
    #endif
        CInternetSession sess;//建立会话
        CHttpFile* fileGet;
        CException* e;
        TRY
        {
            fileGet=(CHttpFile*)sess.OpenURL(strFileName);//打开文件
        }
        CATCH_ALL(e)
        {
            fileGet = 0;
        }
        END_CATCH_ALL    if(fileGet)
        {
            DWORD dwStatus;
            DWORD dwBuffLen = sizeof(dwStatus);
            BOOL bSuccess = fileGet->QueryInfo(
                HTTP_QUERY_STATUS_CODE|HTTP_QUERY_FLAG_NUMBER,
                &dwStatus, &dwBuffLen);        if( bSuccess && dwStatus>=  200&& dwStatus<300 ) 
                { CStdioFile fileWrite; 
            if(fileWrite.Open(strWriteName, Cfile::modeWrite|Cfile::modeCreate))
                {    while(fileGet->ReadString(strSentence)){
                        fileWrite.WriteString(strSentence+"\n");
                    }
                    fileWrite.Close();
                    SetDlgItemText(IDC_DOWNMSG, "下载完毕,正在导入...");
                    导入该文件,与本话题无关
                 }// if openfile success.
                 else 
                    SetDlgItemText(IDC_DOWNMSG,
             "本地文件"+strWriteName+"打开出错\n请检查您的硬盘是否没有空间。"); 
            }        // if bSuccess.
             else 
                SetDlgItemText(IDC_DOWNMSG,
          "网上没有更新的中文网址模板\n请下次再执行,或者到松鼠之家查看最新信息。");        fileGet->Close();
            delete fileGet;
        }
        else
            SetDlgItemText(IDC_DOWNMSG, "网络不通,请检查你的网络连接情况。");
        sess.Close();