http://blog.csdn.net/gnixuyil/article/details/7688439

获取网络图片

  1. CString URL="http://www.google.com.hk/images/srpr/logo3w.png"
  2. CInternetSession session;
  3. CHttpFile *httpFile = (CHttpFile *)session.OpenURL(URL);
  4. CStdioFile imgFile;
  5. char buff[1024];    // 缓存
  6. imgFile.Open("图片名字.png", CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
  7. DWORD dwStatusCode;
  8. httpFile->QueryInfoStatusCode(dwStatusCode);
  9. if(dwStatusCode == HTTP_STATUS_OK) {
  10. int size=0;
  11. do {
  12. size = httpFile->Read(buff,1024);    // 读取图片
  13. imgFile.Write(buff,size);
  14. }while(size > 0);
  15. }
  16. httpFile->Close();
  17. session.Close();

获取URL的html

  1. CInternetSession session;
  2. CHttpFile *httpFile = (CHttpFile *)session.OpenURL(m_URL);
  3. DWORD dwStatusCode;
  4. httpFile->QueryInfoStatusCode(dwStatusCode);
  5. CString getdata=_T("");
  6. if(dwStatusCode == HTTP_STATUS_OK) {
  7. CString line_data=_T("");
  8. while(httpFile->ReadString(line_data)) {
  9. getdata += line_data;          // 读取html
  10. }
  11. getdata.TrimRight();
  12. }
  13. httpFile->Close();   // html数据已经放在getdata中
  14. session.Close();
  15. // 如果 getdata 中保存的是UTF_8网页(可以看html的meta字段)
  16. strCoding cfm;  // 编码转换类,详情请看下方连接
  17. string temp = (LPCSTR)getdata.GetBuffer();  // 网页数据,转换成string型
  18. string output;
  19. // UTF_8转GB2312,让MFC控件能显示
  20. cfm.UTF_8ToGB2312(output,(char *)temp.data(),strlen(temp.data()));
  21. // 若MFC字符集为Unicode的话,还需要将多字节转为宽字节
  22. temp = output;
  23. DWORD dwNum = MultiByteToWideChar (CP_ACP, 0, temp.c_str(), -1, NULL, 0);
  24. wchar_t *pwText;
  25. pwText = new wchar_t[dwNum];
  26. MultiByteToWideChar (CP_ACP, 0, temp.c_str(), -1, pwText, dwNum);
  27. // 取得转换后结果 m_data 用于显示
  28. m_data = pwText;
  29. delete []pwText;

编码转换类:http://blog.csdn.net/gnixuyil/article/details/7688469

//下载文件并保存为新文件名

#include <afx.h>
#include <afxinet.h>
#define RECVPACK_SIZE 2048
bool DownloadSaveFiles(char* url,char *strSaveFile) {//下载文件并保存为新文件名
    bool ret=false;
    CInternetSession Sess("lpload");
    Sess.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT     , 2000); //2秒的连接超时
    Sess.SetOption(INTERNET_OPTION_SEND_TIMEOUT        , 2000); //2秒的发送超时
    Sess.SetOption(INTERNET_OPTION_RECEIVE_TIMEOUT     , 2000); //2秒的接收超时
    Sess.SetOption(INTERNET_OPTION_DATA_SEND_TIMEOUT   , 2000); //2秒的发送超时
    Sess.SetOption(INTERNET_OPTION_DATA_RECEIVE_TIMEOUT, 2000); //2秒的接收超时
    DWORD dwFlag = INTERNET_FLAG_TRANSFER_BINARY|INTERNET_FLAG_DONT_CACHE|INTERNET_FLAG_RELOAD ;
 
    CHttpFile* cFile   = NULL;
    char      *pBuf    = NULL;
    int        nBufLen = 0   ;
    do {
        try{
            cFile = (CHttpFile*)Sess.OpenURL(url,1,dwFlag);
            DWORD dwStatusCode;
            cFile->QueryInfoStatusCode(dwStatusCode);
            if (dwStatusCode == HTTP_STATUS_OK) {
                //查询文件长度
                DWORD nLen=0;
                cFile->QueryInfo(HTTP_QUERY_CONTENT_LENGTH, nLen);
                //CString strFilename = GetFileName(url,TRUE);
                nBufLen=nLen;
                if (nLen <= 0) break;//
 
                //分配接收数据缓存
                pBuf = (char*)malloc(nLen+8);
                ZeroMemory(pBuf,nLen+8);
 
                char *p=pBuf;
                while (nLen>0) {
                    //每次下载8K
                    int n = cFile->Read(p,(nLen<RECVPACK_SIZE)?nLen:RECVPACK_SIZE);
                    //接收完成退出循环
                    if (n <= 0) break;//
                    //接收缓存后移
                    p+= n ;
                    //剩余长度递减
                    nLen -= n ;
                }
 
                //如果未接收完中断退出
                if (nLen != 0) break;
 
                //接收成功保存到文件
 
                CFile file(strSaveFile, CFile::modeCreate | CFile::modeWrite);
                file.Write(pBuf,nBufLen);
                file.Close();
                ret = true;
            }
        catch(...) {
            break;//
        }
    while(0);
 
    //释放缓存
    if (pBuf) {
        free(pBuf);
        pBuf=NULL;
        nBufLen = 0 ;
    }
 
    //关闭下载连接
    if (cFile) {
        cFile->Close();
        Sess.Close();
        delete cFile;
    }
    return ret;
}
int main() {
    DownloadSaveFiles("http://www.nirsoft.net/utils/nircmd.zip","d:\\cppdld_nircmd.zip");
    return 0;
}

C++ 获取URL图片、html文件,CInternetSession 【转】的更多相关文章

  1. Java获取URL链接的文件类型

    问题发生: Java从网络批量读取图片并保存至本网站服务器后再插入文章中 今天转入一篇文章 http://news.qq.com/a/20170605/045860.htm 发现图片未能成功上传 查看 ...

  2. 获取URL中的文件的扩展名

    问题: 尽可能多地写出获取文件扩展名的方法: //方法一(分割数组) function getExt($url){ $arr = explode('.',$url); $len = count($ar ...

  3. PHP 获取url里文件的扩展名

    PHP 获取url地址中文件的扩展名 $url = 'http://www.abc.com/ab/cd/e.php?id=1&data=2#laowen';echo pathinfo( par ...

  4. js获取url参数、图片转本地base64跨域问题

    获取url参数是经常需要用的一个方法,url上的参数可以让我们的程序执行更灵活. 图片转本地也是很实用的,因为海报合成通常只支持本地. 下面我们来看看这些功能的实现: 获取所有参数,采用split拆分 ...

  5. wordpress 获取特色图片url方法

    制作主题是需要获取特色图片,直接获取到url能更好的编辑css样式 <?php $large_image_url = wp_get_attachment_image_src( get_post_ ...

  6. Unity3d外部加载音频,视频,图片等资源 及根据路径获取制定格式的文件

    1.根据路径获取制定文件类型的文件: 这里写一个类,调用了打开路径的方法:using UnityEngine;using System;using System.Collections.Generic ...

  7. webpack生成的css文件background-image url图片无法加载

    之前在使用webpack3构建基于less预处理的项目时,在对指定的元素使用background-image: url(xxx)来设置背景图片时,本地开发是ok的,但是在项目编译产出后背景图片就找不到 ...

  8. js javascript 获取url,获得当前页面的url,静态html文件js读取url参数

    获得当前页面的url window.location.href 静态html文件js读取url参数 location.search; //获取url中"?"符后的字串 下边为转载的 ...

  9. php远程获取图片或文件信息(get_headers,fsocketopen,curl)

    <?php if(!function_exists("remote_filesize")){ /** * 获取远程或本地文件信息 * @param string $strUr ...

随机推荐

  1. [poj] 1235 Farm Tour || 最小费用最大流

    原题 费用流板子题. 费用流与最大流的区别就是把bfs改为spfa,dfs时把按deep搜索改成按最短路搜索即可 #include<cstdio> #include<queue> ...

  2. [LeetCode] Restore IP Addresses 回溯

    Given a string containing only digits, restore it by returning all possible valid IP address combina ...

  3. win7 无法启动此程序,因为计算机中丢失glut32.dll

    http://zhidao.baidu.com/link?url=9NZxqCvR7hvmKuVR1dUSdQB-TTv_re-g7lp-xZj5FKII04FnMvIKjFhKv299t6wv5Ht ...

  4. 【原创】Linux环境下的图形系统和AMD R600显卡编程(8)——AMD显卡DRM驱动初始化过程

    前面几个blog对DRM驱动.显卡的显存管理机制.中断机制都进行了一些描述,现在阅读AMD drm驱动的初始化过程应该会轻松许多. 下面是一AMD的开发人员编写的文章(先暂时放在这里,后续有时间再添加 ...

  5. vifx.y-emu 和 vifx.y 和 tapx.y

    xen 启动虚拟机后,domain0 可以看到虚拟网卡设备,但是有几种显示 tapx.y , vifx.y 或者 vifx.y-emu . 在我的实验里,同样的配置,如 vif = ["ty ...

  6. centos tc 端口限速

    #http://www.fx114.net/qa-178-108967.aspx#http://professor.blog.51cto.com/996189/1569481/#http://blog ...

  7. mybatis之<trim prefix="" suffix="" suffixOverrides="" prefixOverrides=""></trim>的含义

    转自:http://blog.csdn.net/qq_33054511/article/details/70490046   <trim prefix="" suffix=& ...

  8. python 去除列表重复元素方法汇总

    1.使用set集合,虽然去除掉重复元素,但是顺序改变了 耗时约4.0*10^-5 s A = ['a','b','X','a','b','G'] B = list(set(A)) print(A)[' ...

  9. 函数名后加const

    通过把类成员函数声明为const   以表明它们不修改类对象. 任何不会修改数据成员的函数都应该声明为const类型.如果在编写const成员函数时,不慎修改了数据成员,或者调用了其它非const成员 ...

  10. adb install 安卓apk的包

    ➜  ~ adb install /Users/jkr/Downloads/QYVideoClient-debug.apk /Users/jkr/Downloads/QYVideoClient-deb ...