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 ...
随机推荐
- Manacher算法学习 【马拉车】
好久没写算法学习博客了 比较懒,一直在刷水题 今天学一个用于回文串计算问题manacher算法[马拉车] 回文串 回文串:指的是以字符串中心为轴,两边字符关于该轴对称的字符串 ——例如abaaba 最 ...
- Leetcode 4. Median of Two Sorted Arrays(二分)
4. Median of Two Sorted Arrays 题目链接:https://leetcode.com/problems/median-of-two-sorted-arrays/ Descr ...
- JQuery实现多个菜单的显示隐藏
(如有错敬请指点,以下是我工作中遇到并且解决的问题) 效果图: 点击各个菜单显示/隐藏,以及点击灰色部分隐藏. 比如点击了第一个菜单,然后点击第二个菜单,第一个菜单会隐藏,再显示第二个菜单,不会叠加. ...
- sql server判断数据库、表、列、视图是否存在
1 判断数据库是否存在 if exists (select * from sys.databases where name = '数据库名') drop database [数据库名] 2 判断表是否 ...
- 【linux高级程序设计】(第十六章)网络服务器应用设计
xinetd服务介绍 xinetd是Linux下的一个网络守候进程,用来统一管理网络负载不大的一组小型网路服务. 一些小型的网络服务,比如时间,telnet服务,不以守候进程出现,而是让xinetd服 ...
- ZOJ 3949 (17th 浙大校赛 B题,树型DP)
题目链接 The 17th Zhejiang University Programming Contest Problem B 题意 给定一棵树,现在要加一条连接$1$(根结点)和$x$的边,求加 ...
- Python_Tips[4] -> and 和 or 的计算原则
and和or / and & or 对于and和or,可以连接多个值,其分别遵循原则: 全是 And: 返回第一个遇到的无效值,若全有效,返回最后一个有效值 全是 Or: 返回第一个遇到的有效 ...
- [Math Review] Statistics Basic: Sampling Distribution
Inferential Statistics Generalizing from a sample to a population that involves determining how far ...
- 洛谷——2871[USACO07DEC]手链Charm Bracelet——01背包
题目描述 Bessie has gone to the mall's jewelry store and spies a charm bracelet. Of course, she'd like t ...
- Out of Sorts II
问题 E: Out of Sorts II 时间限制: 1 Sec 内存限制: 128 MB提交: 68 解决: 4[提交] [状态] [讨论版] [命题人:] 题目描述 Keeping an e ...