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

获取网络图片

[cpp] view plaincopy
  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

[cpp] view plaincopy
  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. excel 获取url图片_从Excel超链接获取URL

    excel 获取url图片 Last week on the Bacon Bits blog, Mike Alexander showed how to send an email with the ...

  2. python下载url图片或文件

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.Get方法 二.urllib方法 三.可能遇到的问题 1.urllib.error.HTTPError: HTTP ...

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

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

  4. java获取url前缀 jsp_Java获取URL链接的文件类型

    问题发生: 查看源码发现: 因为没有文件类型所以在转存图片的时候出错了 谷歌百度了一下发现解决办法: URLConnection class provides two static methods t ...

  5. Android 获取指定图片或文件的大小

    /*** 获取指定文件大小 */public static long getFileSize(File file) throws Exception {long size = 0;if (file.e ...

  6. iOS 获取本地图片URL

    文件目录内图片URL let path = Bundle.main.path(forResource: 图片名字, ofType: 文件类型) let url = URL(fileURLWithPat ...

  7. 由laravel 5.5无法获取url中的参数引发的apache的.htaccess文件问题

    一.前言 我这边碰到的问题就是,无法获取url中的get参数.本地使用的是laravel 5.5版本.明明url里面清清楚楚的写着参数,但是你却获取不到,这感觉实在是很气很气.刚开始以为是larave ...

  8. android 图片 写入文件格式,怎么把web服务器端获取的图片写入android客户端文件...

    怎么把web服务器端数据库获取的图片写入android客户端文件 解决方案 10 获得图片,然后用FileoutputStream写入到文件-- 10 先用htturlconnection(或其他方法 ...

  9. php 判断网络图片是否存,PHP判断远程图片或文件或url是否存在-180

    PHP判断远程图片或文件或url是否存在-180 我通常使用curl判断判断远程图片或文件是否存在: /** * @link http://www.phpddt.com */ function url ...

  10. 正则表达式 去除连续空白 + 获取url +分割url + 获取图片

    关联: PHP正则表达式 PHP正则表达式提取超链接及其标题 <?php$code = ' <a href="http://www.ibtimes.com" targe ...

最新文章

  1. 数组,结构体初始化为0
  2. yolov5和yolov5-face nms比较
  3. 【Android NDK 开发】JNI 动态注册 ( 动态注册流程 | JNI_OnLoad 方法 | JNINativeMethod 结构体 | GetEnv | RegisterNatives )
  4. shutter 无法设置快捷键的解决方法
  5. qt 中常见错误汇总
  6. Linux(树莓派)安装 python-opencv
  7. (二十六)【2021 WWW】Knowledge-Preserving Incremental Social Event Detection via Heterogeneous GNNs
  8. nohup后台运行以及重定向标准输出和标准异常
  9. iphone悬浮球怎么设置_OPPO手机怎么截屏?大部分的人只会两种,包括你吗?
  10. 大网的经验(华为的创新—转载)
  11. Windows Server 2008 R2之二从介质安装 AD DS
  12. ubuntu命令chmod755
  13. java翻译smali_【翻译】apk反汇编之smali语法
  14. 用pcdet跑deecamp20_liadr3-1
  15. 打开Excel2010时提示错误:向程序发送命令时出现问题!
  16. 高校云平台V3.1版总结
  17. 使用Excel TRIMMEAN忽略异常值
  18. 我们应该如何优雅的处理 React 中受控与非受控
  19. 20组免费的Photoshop渐变效果素材
  20. python代码画大白_Python turtle 画个大白

热门文章

  1. BPTT算法推导以及LSTM是如何解决梯度消失的
  2. js base64图片太大_JS实现base64图片下载 简易方法
  3. html样式超出出现滚动条,CSS 设置的高度超出屏幕高度为什么没出现滚动条?
  4. ie的window.open 未指明的错误_火灾无情预防先行 错误操作致火灾加重
  5. leetcode Best Time to Buy and Sell Stock专题
  6. 获得密钥_《哪吒》公映密钥延期一个月?关于“密钥延期”的全揭秘来了
  7. React taro 微信小程序上传文件 多个文件上传
  8. unordered_set/unordered_map 增删查操作
  9. L1-016 查验身份证 (15 分) — 团体程序设计天梯赛
  10. git log --stat的使用说明