本示例使用MFC 类CInternetSession 建立连接,使用 CHttpFile读取内容。

首先,建立一个MFC对话框项目,界面如下:

1. 添加头文件:

  1. #include <afxinet.h>

2. UTF-8 转 UNICODE:

  1. int cU8xU(wchar_t* pOut,char *pText)
  2. {
  3. int ret = 0;
  4. char* uchar = (char *)pOut;
  5. unsigned cIn = (unsigned char)pText[0];
  6. if(cIn<0x80){ // ASCII 0x00 ~ 0x7f
  7. pOut[0] = pText[0];
  8. }else if(cIn<0xdf){
  9. uchar[0] = (pText[0]<<6)|(pText[1]&0x3f);
  10. uchar[1] = (pText[0]>>2)&0x0f;
  11. ret = 1;
  12. }else if(cIn<=0xef){
  13. uchar[0] = (pText[1]<<6)|(pText[2]&0x3f);
  14. uchar[1] = (pText[0]<<4)|((pText[1]>>2)&0x0f);
  15. ret = 2;
  16. }else if(cIn<0xf7){
  17. uchar[0] = (pText[2]<<6)|(pText[3]&0x3f);
  18. uchar[1] = (pText[1]<<4)|((pText[2]>>2)&0x0f);
  19. uchar[2] = ((pText[0]<<2)&0x1c)|((pText[1]>>4)&0x03);
  20. ret = 3;
  21. }
  22. return ret;
  23. }
  24. int sU8xU(WCHAR* pOut,char *pText,int Len){
  25. int i,j;
  26. for(i=0,j=0;i<Len;i++,j++){
  27. i+=cU8xU(&pOut[j],&pText[i]);
  28. }
  29. return j;
  30. }

3. 加入按键响应函数:

  1. void CURL_TESTDlg::OnBnClickedButton1()
  2. {
  3. //#include <afxinet.h>
  4. CString url;
  5. GetDlgItem(IDC_EDIT1)->GetWindowText(url);
  6.  
  7. DWORD code = 0;
  8. CInternetSession httpSession ;
  9. CHttpFile * htmlFile=NULL ;
  10.  
  11. try{
  12. //打开网页
  13. htmlFile=(CHttpFile*)httpSession.OpenURL(_T("http://www.sogou.com/"));
  14.  
  15. //htmlFile=(CHttpFile*)httpSession.OpenURL(url);
  16. htmlFile->QueryInfoStatusCode(code);
  17. }catch(...)
  18. {
  19. MessageBox(_T("err"),_T("BE"),1); // 如果断网而打不开这个网址,并且不抓取这个错误,就会弹出一个提示系统提示框!这里我自己处理。
  20.  
  21. return;
  22. }
  23.  
  24. //读取网页数据
  25. CString str;
  26. CString info=_T("");
  27. while(htmlFile->ReadString(str))
  28. {
  29. info+=str ;
  30. }
  31.  
  32. //释放
  33. htmlFile->Close();
  34. httpSession.Close();
  35.  
  36. //显示
  37. CString result;
  38. int length = info.GetLength();
  39. char *ab = new char[length];
  40. memset(ab, 0, length);
  41. memcpy(ab, info.GetBuffer(), length);
  42. WCHAR *big = new WCHAR[length];
  43. memset(big, 0, length);
  44. int len = sU8xU(big, ab, length);
  45. big[len] = '\0';
  46. delete []ab;
  47.  
  48. CString temp(big);
  49.  
  50. result.Format("The return code(返回值): %d\r\n %s", code, temp.GetBuffer());
  51.  
  52. GetDlgItem(IDC_EDIT2)->SetWindowText(result);
  53. //delete []big; // i don't how to do for this.
  54. }

4. 另外也可以使用这段粗糙的代码实现这个功能:

  1. CInternetSession mysession;
  2. CHttpConnection *myconn=mysession.GetHttpConnection("www.veno2.com");
  3.  
  4. CHttpFile *myfile=myconn->OpenRequest("GET","/ag_list");
  5. myfile->SendRequest();
  6.  
  7. CString mystr;
  8. CString tmp;
  9. while(myfile->ReadString(tmp))
  10. {
  11. mystr+=tmp;
  12. }
  13. //GetDlgItem(IDC_EDIT2)->SetWindowText(mystr);
  14.  
  15. myfile->Close();
  16. myconn->Close();
  17. mysession.Close();
  18. delete myfile;
  19. delete myconn;
  20. myfile=0;
  21. myconn=0;

MFC网页访问的实现示例的更多相关文章

  1. 网页中"IE限制网页访问脚本或ActiveX控件"的提示问题的解决方法

    以前从来没有注意过"IE限制网页访问脚本或ActiveX控件"的提示问题,对于这个小细节问题,虽然感觉很别扭,但一直没考虑解决方法,今天才发现该问题可以轻松解决,以下做个小小记录. ...

  2. 用户对动态PHP网页访问过程,以及nginx解析php步骤

    www.example.com | Nginx | 路由到www.example.com/index.php | 加载nginx的fast-cgi模块 | fast-cgi监听127.0.0.1:90 ...

  3. C++、VC++、MFC网页自动注册、登陆、发帖、留言,QQ注册、QQ申请器源码、注册邮箱源码、自动发帖源码

    C++.VC++.MFC网页自动注册.登陆.发帖.留言,QQ注册.QQ申请器源码.注册邮箱源码.自动发帖源码   参考资料: 自动登录yahoo邮箱http://blog.csdn.net/suisu ...

  4. svn_linux + apache 实现网页访问svn

    CentOS7:搭建SVN + Apache 服务器实现网页访问 1. 安装httpd 安装httpd服务: $ sudo yum install httpd 检查httpd是否安装成功: $ htt ...

  5. JSP简单实现统计网页访问次数

    JSP简单实现统计网页访问次数 需求:统计网页的访问次数 核心思想:利用application对象,将访问次数的信息放入application对象中,每次访问就+1.这里利用了application对 ...

  6. jquery访问ashx文件示例

    转自原文jquery访问ashx文件示例 .ashx 文件用于写web handler的..ashx文件与.aspx文件类似,可以通过它来调用HttpHandler类,它免去了普通.aspx页面的控件 ...

  7. PHP 简易网页访问统计

    传统的网页访问统计,已经有很多,如 51la.百度统计.站长统计 一般都需要引用JS,在你的网页内嵌入JS,这个操作存在风险,并且不可控. 可以考虑使用 [img src.css src.link h ...

  8. MFC网页

    写网页, 选择MFC,MFC应用程序,其他默认,单击确定 项目类型,选Offce,其他默认,单击下一步 默认,单击下一步 文件拓展名,输入html,其他默认,单击下一步 数据库支持,默认,单击下一步 ...

  9. 【新特性速递】FineUIPro/Mvc/Core 全新移动端访问体验(示例首页)!

    移动端支持 虽然 FineUIPro 早在 2016 年就已经完成对移动端的适配工作,并新增了 50 多个官网示例. 并且,我们也新增了一个移动端的首页 http://pro.fineui.com/m ...

随机推荐

  1. spring 事务 笔记3.1

    Spring事务 以前的事务都是编程式事务,需要开启和关闭,然后程序写在这里面 spring,声明式事务 Spring事务隔离级别 DEFAULT 使用数据库默认隔离级别 READ_UNCOMMITT ...

  2. 转:STL使用入门( Using STL)

    1 介绍 我最开始结束C++编程是从DOS下的Borland C++开始的.那时他们在最新版本3.1中就包含了一套模板库用来做collection.那真是个好东东.当我开始使用Visual C++ 2 ...

  3. Linux和windows下的shutdown命令

    Linux下的shutdown命令 shutdown [options] [time] [wall] options: --help 获取帮助 -h 关机 -r 重启 -c 取消 -k 仅显示警告信息 ...

  4. IOS中Key-Value Coding (KVC)的使用具体解释

    kvc.键值编码,是一个非正式的协议.它提供一种机制来间接訪问对象的属性. 直接訪问对象是通过调用訪问器的方法实现,而kvc不须要调用訪问器的设置和获取方法.能够直接訪问对象的属性. 以下介绍一下kv ...

  5. android应用如何启动另外一个apk应用

    在开发的过程中,经常会遇到在一个应用中启动另外一个apk应用的情况 问题的核心点在于我们要拿到第三方apk的package名称跟class名称, 如:package名称是com.funcity.tax ...

  6. HTML高级选项卡(1)————表标签

    利用上述表格属性,能够简单的创建一个表格.并随意的分割行和列. <html> <head> <title>表格的应用</title> </head ...

  7. listview 拖动item效果实现

    listview 拖动item效果实现 效果图如下: 拖拽前: 拖拽后: 首先参考源码中:TouchInterceptor 类,该类会在下面给出: 第一步:主类: /**  *   */ packag ...

  8. 一天一个类--NIO 之Buffer

    java.nio  --- 定义了 Buffer 及其数据类型相关的子类.其中被 java.nio.channels 中的类用来进行 IO 操作的 ByteBuffer 的作用非常重要. java.n ...

  9. Ural 1313 - Some Words about Sport

    Ural doctors worry about the health of their youth very much. Special investigations showed that a l ...

  10. 基于visual Studio2013解决算法导论之026二叉树

     题目 二叉树实现 解决代码及点评 #include<stdio.h> #include <malloc.h> #include <stdlib.h> typ ...