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. Tomcat学习笔记(十一)

    StandardContext类  Context实例代表着一个具体的web应用程序,其中包含一个或者多个Wrapper实例,每个Wrapper实例代表着具体的servlet定义.但是,Context ...

  2. spring in action学习笔记一:DI(Dependency Injection)依赖注入之CI(Constructor Injection)构造器注入

    一:这里先说一下DI(Dependency Injection)依赖注入有种表现形式:一种是CI(Constructor Injection)构造方法注入,另一种是SI(Set Injection) ...

  3. Linux下find命令参数及用法详解

    由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时间来了解一下.即使系统中含有网络文件系统( NFS),find命令在该文件系统中同样有效,只你具有相应的权限.在运行一个非常 ...

  4. 从零开始--Spring项目整合(1)使用maven框架搭建项目

    这些年一直在用spring的框架搭建项目,现在开始我们从零开始利用Spring框架来搭建项目,目前我能想到有Spring.SpringMVC.SpringJDBC.Mybatis.WebSockt.R ...

  5. java equals 与 hashCode

    转:http://m.blog.csdn.net/blog/pengchua/2297547# 如果你为某个类写了equals方法,那么应该同时编写hashCode方法.如果没有提供hashcode方 ...

  6. Linux装软件

    一.rpm包安装方式步骤: 1.找到相应的软件包,比如soft.version.rpm,下载到本机某个目录: 2.打开一个终端,su -成root用户: 3.cd soft.version.rpm所在 ...

  7. hdu1024 Max Sum Plus Plus的另一种解法

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1024 http://www.51nod.com/onlineJudge/questionCode.htm ...

  8. ListView控件的不为人知的秘密

    使用ListView控件展示数据 1.图像列表控件(ImageList控件) 图像列表控件(ImageList控件)是含有图像对象的集合,可以通过索引或关键字引用该集合的每个对象,ImageList控 ...

  9. 我们曾经心碎的C#之 第一章.我的第一个C#程序

    第一章.      C#入门 1.1        .NET与C#            001..NET是Microsoft.NET的简称,是基于Windows平台的一种技术            ...

  10. win7 iis 7.0 碰到 503错误,找到的解决方案

    Service Unavailable HTTP Error 503. The service is unavailable. 今天要布署一个网站,在自己的电脑上,结果碰到服务器503错误,找应用程序 ...