使用vc连接指定url获得其HTML的代码

      最近只是忙于那个mona边边脚脚的一些工作,所以也没有什么好的与现在项目有关的实现代码,前面我也自己说过我会不断的去整理前面自己的工作日志,也会陆续的将自己现在工作中的一些重点代码贴出来大家共享,所以我不会失信的,至少作为一名非常志同于软件共享的人员,虽然自己不是什么高手,菜鸟级也就是凑合毕业,但是我还是要跟一些朋友进行共享,也许我帮不到你,也许我会帮你很多很多,总之只要能够帮到你就好,记得如果看过了,您也有时间记得发表个评论,我也知道自己改怎么去不断的完善自己的代码,该发表一些什么样的代码来大家共享,看过的书上例子每次看过我都感觉是这样的例子也太简单了嘛,简直忽略了自己智商,可是当我要真正的在项目中应用它时,在项目中真正的去跟其他关联的时候才发现原来这都不是随便的例子,如果你只是照着书本上的去实做,可能对你理解vc环境绝对有帮助,可是对你用vc进行项目开发,如果不去对实例进行思考,它能用于什么地方,与什么结合,那么等到真正的涉及到项目时,你就会发现原来自己真的什么也不会唷。

       我是从最菜鸟的走到菜鸟的刚刚及格,这些是我在真正的项目中最大的感受,有时候为了只是实现一个功能,我会想方设法的去测试,有时候还在想以前就明明练习过这个例子,可是当时为什么没有去思考,为什么没有想到会应用到这个方面呢。很多的很多的感概,慢慢我开始有点掌握方向。说实话我的工作经验还不足一年,对一些真正的大的项目也不是很清楚,但是作为技术开发人员,这工作的时间给我最大的收获就是,只要你有需求我就没有做不到的,我知道根据需求我该怎么去操作。其实想想这些已经足够了,我还不到30岁,在以后走的路很长也学荣幸的话我又进入一家软件公司我会安定下自己的心思,逐步的去对每一个项目去思考,去积累更多更广的经验。我对自己的未来充满信心,尽管现在的我有些迷茫,这是人生的十字路口,我从来没有这么理智的去思考过自己该怎么走好以后的路,我发现原来的激情依然存在,社会的腐蚀也是一点点的渗透,我开始去接收这些,要去成熟面对一切了,IT泡沫还是继续吗?现有的技术真的已经达到了那么高智能化了吗,如果人们就是以现在的科技水平说是IT已经开始走滑坡路,这说明这个人充其量是IT的看客,真正的智能化IT产业还没有开始,现在的工控制造越来越热,很多的企业工厂都在慢慢的走向自动化,智能化,但是背后的自动化智能化都是有人来操纵的。所以说IT的泡沫不属于我们技术人员,只是属于那些在IT中炒作资金的人,说白了还是金融界的技术人员。

     废话又是一堆,最近的感慨颇多,如果实在饶了您的兴趣,您千万别见怪。好了马上我就把我以前这个使用vc练习过的例子给您贴出来。

u      利用WinInet API 编写HTTP程序的一般步骤:1、调用InternetOpen()完成对Internet DLL 初始化工作,并返回一会话句柄2、用会话句柄调用InternetConnect(),同时设置INTERNET_SERVICE_HTTP标志,开始建立与HTTP服务器的连接,并返回一个连接句柄3、利用连接句柄调用HttpOpenRequest()或HttpOpenReQuestEx()函数打开一个HTTP请求,并返回Internet句柄,该句柄可以用于其它的HTTP函数4、利用Internet句柄调用HttpSendRequest()或HttpSendRequestEx()函数建立与HTTP服务器连接,并真正将请求发送到指定的站点5、如果HttpSendRequest()或HttpSendRequestEx()返回的句柄有效,那么就可以有HttpSendRequest()或HttpSendRequestEx()返回的句柄进行诸如上传输局、查询信息或下载数据等操作。

u      在实际程序当中对实现源代码的下载显示如下设置

  void CCodeDlg::ShowCode(CString strUrl)

{

       //判断地址是否有效,如果空或开头7个字符不是"http://"

    if (strUrl.IsEmpty()||strUrl.Left(7)!="http://")

    {

       AfxMessageBox("请输入正确的URL地址!");

       return;

    }

    //解析地址,得到服务器名字和文件路径名

    ParseURL(strUrl);

    //第一步:初始化internet DLL,这是第一个被调用的函数

    HINTERNET hSession=::InternetOpen("Raw HTML Reader",PRE_CONFIG_INTERNET_ACCESS,"",INTERNET_INVALID_PORT_NUMBER,0);

    //判断会话句柄是否有效

    if(hSession==NULL)

    {

       AfxMessageBox("无法连接Internet!");

       return;

    }

    //第二步:初始化HTTP session

    HINTERNET hConnect=::InternetConnect(hSession,m_strServer,INTERNET_INVALID_PORT_NUMBER,NULL,"",INTERNET_SERVICE_HTTP,0,0);

    //判断连接句柄是否有效

    if(hConnect==NULL)

    {

       AfxMessageBox("无法连接Internet!");

       //关闭会话句柄

       VERIFY(::InternetCloseHandle(hSession));

        return;

    }

    //第三步:打开一个HTTP请求句柄

    HINTERNET hHttpFile=::HttpOpenRequest(hConnect,"GET",m_strPath,HTTP_VERSION,NULL,0,INTERNET_FLAG_DONT_CACHE,0);

    //判断句柄是否有效

    if(hHttpFile==NULL)

    {

       AfxMessageBox("Http request failed!");

       VERIFY(::InternetCloseHandle(hConnect)); 

       VERIFY(::InternetCloseHandle(hSession));

       return;

    }

    //显示等待光标

    CWaitCursor wait;

    //第四步:发出请求

    BOOL bSendRequest=::HttpSendRequest(hHttpFile,NULL,0,0,0);

    if(bSendRequest)

    {

       //得到文件的大小

       char achQueryBuf[16];

       DWORD dwFileSize;

       DWORD dwQueryBufLen=sizeof(achQueryBuf);

       BOOL bQuery=::HttpQueryInfo(hHttpFile,HTTP_QUERY_CONTENT_LENGTH,achQueryBuf,&dwQueryBufLen,NULL);

       if(bQuery)

       {

           //查找成功,指出需要存放文件的内存大小

           dwFileSize=(DWORD)atol(achQueryBuf);

       }

       else

       {

           //失败,猜出一个最大文件数

           dwFileSize=10*1024;

       }

       //分配一个缓冲区给文件数据

        char *lpszBuf=new char[dwFileSize+1];

        //读文件

        DWORD dwBytesRead;

        BOOL bRead=::InternetReadFile(hHttpFile,lpszBuf,dwFileSize+1,&dwBytesRead);

        //显示HTML的源码

       //DisplayRawHtml(lpszBuf);

        m_editHtml.SetWindowText((LPCTSTR)lpszBuf);

        //清除缓冲区

        delete lpszBuf;

        //关闭INTERNET句柄

        VERIFY(::InternetCloseHandle(hHttpFile));

        VERIFY(::InternetCloseHandle(hConnect));

        VERIFY(::InternetCloseHandle(hSession));

 

    }

 

}

对网页的链接显示如下设置:

void CHttpExpView::OnShowhtml()

{

    // TODO: Add your command handler code here

// TODO: Add your command handler code here

    //创建CCodeDlg对话框

    CCodeDlg dlg;

    //将URL地址传递给CCodeDlg对话框

    dlg.m_strUrl=m_strUrl;

    //显示CCodeDlg对话框

    dlg.DoModal();

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
类似网络爬虫,从一个网页“爬”到另一个网页,然后选择图片下载。多线程。 可以用来按照一定规则下载网页中的元素,如图片、网页、flash等,举例如下: 1. 下载sohu主页的所有图片 在地址栏中输入www.sohu.com,在“选项”中将最大下载图片数目设为0,最大访问网页数设为1,点开始即可。 2. 下载sohu主页及其子链接中的所有图片,共下载100张 在“选项”中将最大下载图片数目设为100,最大访问网页数设为0 3. 下载人人网中的相册 打开相册中的一张相片,如http://photo.renren.com/getphoto.do?id=975410152&owner=230410031&curpage=0&t=#975410152,将地址复制到软件的地址栏(注意要将窗口拉长,使得地址栏足够容下这个地址,否则地址会被切断,这个bug我一直没找到解决办法)。 接下来需要一点观察。先看要下载的图片链接(http://fmn017.xnimg.cn/fmn017/pic001/20080926/17/21/large_wJZc_3213f200058.jpg),再看下一张,是http://fmn014.xnimg.cn/fmn014/pic001/20080926/17/21/large_Ao10_3208l200058.jpg,找到其中的公共部分,不妨取为xnimg.cn/fmn,将其输入“选项”中的“图片路径含有”,并勾选复选框。 再观察“上一张”、“下一张”的链接(http://photo.renren.com/getphoto.do?id=975410152&owner=230410031&curpage=0&t=#975409483)(http://photo.renren.com/getphoto.do?id=975410152&owner=230410031&curpage=0&t=#975410114),取其公共部分photo.renren.com/getphoto.do,填入“网页路径含有”并勾选复选框。 最后将最大下载图片数目和最大访问网页数都设为0,点开始即可。上面限制了图片和网页路径,只是为了防止下载不需要的图片。 4. 一次性在你的100个好友的页面上留下脚印 观察所有个人主页链接url,取出公共部分http://renren.com/profile.do,剩下的我就不用说了吧……对了,要是一张图片都不想下载,只要在“图片路径含有”中输入一个空格就可以了,因为任何图片url都不包含空格…… 5. 下载一部小说目录中的所有链接 提示:“选项”中有一个小小的“高级”按钮,有兴趣的同志可以研究一下…… ps. 大家可能看出来了,这个软件很类似网络爬虫,从一个网页“爬”到另一个网页,然后选择图片下载。如果有人需要根据关键词从大的图片搜索引擎下载图片,我推荐crazyPic这个软件。我这个软件的用途我暂时就想出这么多,欢迎发掘更多用途,也欢迎挑bug!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值