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 【转】相关推荐
- excel 获取url图片_从Excel超链接获取URL
excel 获取url图片 Last week on the Bacon Bits blog, Mike Alexander showed how to send an email with the ...
- python下载url图片或文件
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.Get方法 二.urllib方法 三.可能遇到的问题 1.urllib.error.HTTPError: HTTP ...
- Java获取URL链接的文件类型
问题发生: Java从网络批量读取图片并保存至本网站服务器后再插入文章中 今天转入一篇文章 http://news.qq.com/a/20170605/045860.htm 发现图片未能成功上传 查看 ...
- java获取url前缀 jsp_Java获取URL链接的文件类型
问题发生: 查看源码发现: 因为没有文件类型所以在转存图片的时候出错了 谷歌百度了一下发现解决办法: URLConnection class provides two static methods t ...
- Android 获取指定图片或文件的大小
/*** 获取指定文件大小 */public static long getFileSize(File file) throws Exception {long size = 0;if (file.e ...
- iOS 获取本地图片URL
文件目录内图片URL let path = Bundle.main.path(forResource: 图片名字, ofType: 文件类型) let url = URL(fileURLWithPat ...
- 由laravel 5.5无法获取url中的参数引发的apache的.htaccess文件问题
一.前言 我这边碰到的问题就是,无法获取url中的get参数.本地使用的是laravel 5.5版本.明明url里面清清楚楚的写着参数,但是你却获取不到,这感觉实在是很气很气.刚开始以为是larave ...
- android 图片 写入文件格式,怎么把web服务器端获取的图片写入android客户端文件...
怎么把web服务器端数据库获取的图片写入android客户端文件 解决方案 10 获得图片,然后用FileoutputStream写入到文件-- 10 先用htturlconnection(或其他方法 ...
- php 判断网络图片是否存,PHP判断远程图片或文件或url是否存在-180
PHP判断远程图片或文件或url是否存在-180 我通常使用curl判断判断远程图片或文件是否存在: /** * @link http://www.phpddt.com */ function url ...
- 正则表达式 去除连续空白 + 获取url +分割url + 获取图片
关联: PHP正则表达式 PHP正则表达式提取超链接及其标题 <?php$code = ' <a href="http://www.ibtimes.com" targe ...
最新文章
- 数组,结构体初始化为0
- yolov5和yolov5-face nms比较
- 【Android NDK 开发】JNI 动态注册 ( 动态注册流程 | JNI_OnLoad 方法 | JNINativeMethod 结构体 | GetEnv | RegisterNatives )
- shutter 无法设置快捷键的解决方法
- qt 中常见错误汇总
- Linux(树莓派)安装 python-opencv
- (二十六)【2021 WWW】Knowledge-Preserving Incremental Social Event Detection via Heterogeneous GNNs
- nohup后台运行以及重定向标准输出和标准异常
- iphone悬浮球怎么设置_OPPO手机怎么截屏?大部分的人只会两种,包括你吗?
- 大网的经验(华为的创新—转载)
- Windows Server 2008 R2之二从介质安装 AD DS
- ubuntu命令chmod755
- java翻译smali_【翻译】apk反汇编之smali语法
- 用pcdet跑deecamp20_liadr3-1
- 打开Excel2010时提示错误:向程序发送命令时出现问题!
- 高校云平台V3.1版总结
- 使用Excel TRIMMEAN忽略异常值
- 我们应该如何优雅的处理 React 中受控与非受控
- 20组免费的Photoshop渐变效果素材
- python代码画大白_Python turtle 画个大白
热门文章
- BPTT算法推导以及LSTM是如何解决梯度消失的
- js base64图片太大_JS实现base64图片下载 简易方法
- html样式超出出现滚动条,CSS 设置的高度超出屏幕高度为什么没出现滚动条?
- ie的window.open 未指明的错误_火灾无情预防先行 错误操作致火灾加重
- leetcode Best Time to Buy and Sell Stock专题
- 获得密钥_《哪吒》公映密钥延期一个月?关于“密钥延期”的全揭秘来了
- React taro 微信小程序上传文件 多个文件上传
- unordered_set/unordered_map 增删查操作
- L1-016 查验身份证 (15 分) — 团体程序设计天梯赛
- git log --stat的使用说明