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 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 【转】的更多相关文章
- 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 ...
随机推荐
- 【bzoj3779】重组病毒 LCT+树上倍增+DFS序+树状数组区间修改区间查询
题目描述 给出一棵n个节点的树,每一个节点开始有一个互不相同的颜色,初始根节点为1. 定义一次感染为:将指定的一个节点到根的链上的所有节点染成一种新的颜色,代价为这条链上不同颜色的数目. 现有m次操作 ...
- 【Luogu】P3288方伯伯运椰子(消圈定理)
题目链接 分数规划题,详见luogu题解 #include<cstdio> #include<cstring> #include<cctype> #include& ...
- P2324 [SCOI2005]骑士精神
题目描述 输入输出格式 输入格式: 第一行有一个正整数T(T<=10),表示一共有N组数据.接下来有T个5×5的矩阵,0表示白色骑士,1表示黑色骑士,*表示空位.两组数据之间没有空行. 输出格式 ...
- pub/sub的实际应用总结
pub/sub即观察者模式,有多重表现形式 1. Publisher/Subscriber2. Observer/Observable3. Listener(例如EventListener)4. Ev ...
- 怎样把本地的jar包引入到maven工程里面
有些jar包在maven库里面查找不到,但是maven项目又有用到,此时最简单的方法就是把该jar包放到工程底下某个目录,然后在pom.xml里面配置dependency引入它. 具体如何操作呢? 假 ...
- mvvm实现
https://segmentfault.com/a/1190000006599500 http://blog.csdn.net/pur_e/article/details/53066275
- MAC使用IDA PRO远程调试LINUX程序
1 背景 在学习Linux系统上的一些漏洞知识的时候,往往需要进行“实地测试”,但是在Linux系统上进行调试并不太方便,因为LINUX自带的GDB调试工具真的不太人性化,即使有GDBTUI之类的“伪 ...
- 洛谷noip 模拟赛 day1 T1
T7925 剪纸 题目描述 小芳有一张nnn*mmm的长方形纸片.每次小芳将会从这个纸片里面剪去一个最大的正方形纸片,直到全部剪完(剩下一个正方形)为止. 小芳总共能得到多少片正方形纸片? 输入输出格 ...
- 一种提高Android应用进程存活率新方法
一.基础知识 1.Android 进程优先级 1.1 进程优先级等级一般分法:- Activte process- Visible Process- Service process- Backgrou ...
- error LNK2001: unresolved external symbol "int g_cTemplates" (?g_cTemplates@@3HA)(转)
原文转自:http://blog.sina.com.cn/s/blog_639a2ad70101kpen.html 编译directshow若干问题的解决 1.安装好windows sdk,进入dir ...