C++ 获取URL图片、html文件,CInternetSession 【转】
http://blog.csdn.net/gnixuyil/article/details/7688439
获取网络图片
- CString URL="http://www.google.com.hk/images/srpr/logo3w.png"
- CInternetSession session;
- CHttpFile *httpFile = (CHttpFile *)session.OpenURL(URL);
- CStdioFile imgFile;
- char buff[1024]; // 缓存
- imgFile.Open("图片名字.png", CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
- DWORD dwStatusCode;
- httpFile->QueryInfoStatusCode(dwStatusCode);
- if(dwStatusCode == HTTP_STATUS_OK) {
- int size=0;
- do {
- size = httpFile->Read(buff,1024); // 读取图片
- imgFile.Write(buff,size);
- }while(size > 0);
- }
- httpFile->Close();
- session.Close();
获取URL的html
- CInternetSession session;
- CHttpFile *httpFile = (CHttpFile *)session.OpenURL(m_URL);
- DWORD dwStatusCode;
- httpFile->QueryInfoStatusCode(dwStatusCode);
- CString getdata=_T("");
- if(dwStatusCode == HTTP_STATUS_OK) {
- CString line_data=_T("");
- while(httpFile->ReadString(line_data)) {
- getdata += line_data; // 读取html
- }
- getdata.TrimRight();
- }
- httpFile->Close(); // html数据已经放在getdata中
- session.Close();
- // 如果 getdata 中保存的是UTF_8网页(可以看html的meta字段)
- strCoding cfm; // 编码转换类,详情请看下方连接
- string temp = (LPCSTR)getdata.GetBuffer(); // 网页数据,转换成string型
- string output;
- // UTF_8转GB2312,让MFC控件能显示
- cfm.UTF_8ToGB2312(output,(char *)temp.data(),strlen(temp.data()));
- // 若MFC字符集为Unicode的话,还需要将多字节转为宽字节
- temp = output;
- DWORD dwNum = MultiByteToWideChar (CP_ACP, 0, temp.c_str(), -1, NULL, 0);
- wchar_t *pwText;
- pwText = new wchar_t[dwNum];
- MultiByteToWideChar (CP_ACP, 0, temp.c_str(), -1, pwText, dwNum);
- // 取得转换后结果 m_data 用于显示
- m_data = pwText;
- delete []pwText;
编码转换类:http://blog.csdn.net/gnixuyil/article/details/7688469
//下载文件并保存为新文件名
#include <afx.h>#include <afxinet.h>#define RECVPACK_SIZE 2048bool 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 【转】的更多相关文章
- Java获取URL链接的文件类型
问题发生: Java从网络批量读取图片并保存至本网站服务器后再插入文章中 今天转入一篇文章 http://news.qq.com/a/20170605/045860.htm 发现图片未能成功上传 查看 ...
- 获取URL中的文件的扩展名
问题: 尽可能多地写出获取文件扩展名的方法: //方法一(分割数组) function getExt($url){ $arr = explode('.',$url); $len = count($ar ...
- PHP 获取url里文件的扩展名
PHP 获取url地址中文件的扩展名 $url = 'http://www.abc.com/ab/cd/e.php?id=1&data=2#laowen';echo pathinfo( par ...
- js获取url参数、图片转本地base64跨域问题
获取url参数是经常需要用的一个方法,url上的参数可以让我们的程序执行更灵活. 图片转本地也是很实用的,因为海报合成通常只支持本地. 下面我们来看看这些功能的实现: 获取所有参数,采用split拆分 ...
- wordpress 获取特色图片url方法
制作主题是需要获取特色图片,直接获取到url能更好的编辑css样式 <?php $large_image_url = wp_get_attachment_image_src( get_post_ ...
- Unity3d外部加载音频,视频,图片等资源 及根据路径获取制定格式的文件
1.根据路径获取制定文件类型的文件: 这里写一个类,调用了打开路径的方法:using UnityEngine;using System;using System.Collections.Generic ...
- webpack生成的css文件background-image url图片无法加载
之前在使用webpack3构建基于less预处理的项目时,在对指定的元素使用background-image: url(xxx)来设置背景图片时,本地开发是ok的,但是在项目编译产出后背景图片就找不到 ...
- js javascript 获取url,获得当前页面的url,静态html文件js读取url参数
获得当前页面的url window.location.href 静态html文件js读取url参数 location.search; //获取url中"?"符后的字串 下边为转载的 ...
- php远程获取图片或文件信息(get_headers,fsocketopen,curl)
<?php if(!function_exists("remote_filesize")){ /** * 获取远程或本地文件信息 * @param string $strUr ...
随机推荐
- [洛谷P4588][TJOI2018]数学计算
题目大意:有一个数$x$和取模的数$mod$,初始为$1$,有两个操作: $m:x=x\times m$并输出$x\% mod$ $pos:x=x/第pos次操作乘的数$(保证合法),并输出$x\%m ...
- 《R语言实战》读书笔记 第七章--基本统计分析
在导入数据并且将数据进行组织和初步可视化以后,需要对数据进行分布探索和两两关系分析等.主要内容有描述性统计分析.频数表和列联表.相关系数和协方差.t检验.非参数统计. 7.1描述性统计分析 7.1.1 ...
- Codeforces 938.B Run For Your Prize
B. Run For Your Prize time limit per test 1 second memory limit per test 256 megabytes input standar ...
- cygwin设置
解决乱码问题 # 设置为中文环境,使提示成为中文 export LANG =" zh_CN.UTF-8 " # 输出为中文编码 export OUTPUT_CHARSET =& ...
- VS2013 MFC listcontrol 双击编辑
原文地址:http://blog.csdn.net/xianglifighter/article/details/17592209 最近在拿一些小的项目练习MFC,遇到不少问题,期中之一便是修改列表框 ...
- 动态加载.so文件并执行类函数
背景:不同产品组将其功能编译为.so,这些.so 可以加载到统一的基础平台上运行,如果产品组代码有改动,只需要更新对应的.so 问题:如何动态加载.so文件,并使用里边的函数/类 ? 解决方法1: 使 ...
- 图片工具picpick
picpick 功能 截屏滚动窗口可以用来截取长图
- Centos 查看硬盘空间
df -h du -ah --max-depth=1 目录深度为1 -h:以人类可读的方式显示 -a:显示目录占用的磁盘空间大小,还要显示其下目录和文件占用磁盘空间的大小 -s:显示目录占用的磁盘空间 ...
- Selenium2+python自动化6-八种元素元素定位(Firebug和firepath)【转载】
前言 自动化只要掌握四步操作:获取元素,操作元素,获取返回结果,断言(返回结果与期望结果是否一致),最后自动出测试报告.本篇主要讲如何用firefox辅助工具进行元素定位.元素定位在这四个环节中是至关 ...
- mysql 取消命令行继续编辑
mysql> create database mingongge defa\c#回车 置空mysql> 加一个\c cancel 编辑命令 回车