C++ 提取网页内容系列之二
标 题: C++ 提取网页内容系列
作 者: itdef
链 接: http://www.cnblogs.com/itdef/p/4171203.html
欢迎转帖 请保持文本完整并注明出处
另外一种下载网页的内容就是使用windows sdk中的有关HTTP通讯的函数
这里使用了 www.codeproject.com 网站一位中国人封装的C++类
下载地址为http://www.codeproject.com/Articles/66625/A-Fully-Featured-Windows-HTTP-Wrapper-in-C
加入其中几个头文件
就可以在工程中简单的几行代码下载网页内容
WinHttpClient client(L"http://www.verycd.com");
client.SendHttpRequest();
wstring httpResponseHeader = client.GetResponseHeader();
wstring httpResponseContent = client.GetResponseContent();
但是这个类返回的是宽字符串,在中文显示上有点问题。
使用时要根据自己的需求决定是否转换成多字节字符串.
string ws2s(const wstring &ws)
{
const wchar_t* wpchar = ws.c_str();
size_t returnVal = 0;
size_t wSize = 2*ws.size() + 1;
char* pchar = new char[wSize];
memset(pchar,0,wSize);
wcstombs(pchar, wpchar, wSize);
string result = pchar;
delete[] pchar;
return result;
}
整个代码如下:
WinHttpClient.h是codeproject网站下载的类的头文件
#include "WinHttpClient.h" #include <fstream>
#include <string>
#include <Windows.h> using namespace std; string ws2s(const wstring &ws)
{
const wchar_t* wpchar = ws.c_str();
size_t returnVal = 0;
size_t wSize = 2*ws.size() + 1;
char* pchar = new char[wSize];
memset(pchar,0,wSize);
wcstombs(pchar, wpchar, wSize);
string result = pchar;
delete[] pchar;
return result;
} int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL,"");
WinHttpClient client(L"http://www.verycd.com");
bool b = client.SendHttpRequest();
if(!b)
{
cout << "error" << endl;
exit(1);
}
wstring httpResponseHeader = client.GetResponseHeader();
wstring httpResponseContent = client.GetResponseContent();
wcout << httpResponseHeader << endl; if(httpResponseContent.empty() == false )
{
string strTmp = ws2s(httpResponseContent); std::ofstream ofsLogFile("test.dat", std::ios_base::trunc);
ofsLogFile << strTmp << endl;
} return 0;
}

C++ 提取网页内容系列之二的更多相关文章
- C++ 提取网页内容系列之四正则
标 题: C++ 提取网页内容系列之四作 者: itdef链 接: http://www.cnblogs.com/itdef/p/4173833.html 欢迎转帖 请保持文本完整并注明出处 将网页内 ...
- C++ 提取网页内容系列之三
标 题: C++ 提取网页内容系列作 者: itdef链 接: http://www.cnblogs.com/itdef/p/4171659.html 欢迎转帖 请保持文本完整并注明出处 这次继续下载 ...
- C++ 提取网页内容系列之一
标 题: C++ 提取网页内容系列作 者: itdef链 接: http://www.cnblogs.com/itdef/p/4171179.html 欢迎转帖 请保持文本完整并注明出处 首先分析网页 ...
- C++ 提取网页内容系列之五 整合爬取豆瓣读书
工作太忙 没有时间细化了 就说说 主要内容吧 下载和分析漫画是分开的 下载豆瓣漫画页面是使用之前的文章的代码 见http://www.cnblogs.com/itdef/p/4171179.html ...
- NLP+词法系列(二)︱中文分词技术简述、深度学习分词实践(CIPS2016、超多案例)
摘录自:CIPS2016 中文信息处理报告<第一章 词法和句法分析研究进展.现状及趋势>P4 CIPS2016 中文信息处理报告下载链接:http://cips-upload.bj.bce ...
- 【疯狂造轮子-iOS】JSON转Model系列之二
[疯狂造轮子-iOS]JSON转Model系列之二 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇<[疯狂造轮子-iOS]JSON转Model系列之一> ...
- 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新
上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...
- MySQL 系列(二) 你不知道的数据库操作
第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 本章内容: 查看\创建\使用\删除 数据库 用户管理及授权实战 局域网 ...
- ES6+ 现在就用系列(二):let 命令
系列目录 ES6+ 现在就用系列(一):为什么使用ES6+ ES6+ 现在就用系列(二):let 命令 ES6+ 现在就用系列(三):const 命令 ES6+ 现在就用系列(四):箭头函数 => ...
随机推荐
- python3学习笔记六(元组)
元组 创建空元组 tup1 = () #空元组print(type(tup1))print(tup1) tup2 = (10)tup3 = (10,)print(type(tup2)) #不加逗号,类 ...
- onOptionsItemSelected、onMenuItemSelected、onContextItemSelected 区别
1.在点击选项菜单(OptionsMenu:点击menu弹出的菜单)的菜单项时即调用了onMenuItemSelected 也调用了onOptionsItemSelected ,于是疑惑他们 ...
- 学习笔记之scikit-learn
scikit-learn: machine learning in Python — scikit-learn 0.20.0 documentation https://scikit-learn.or ...
- Centos7 安装redis集群哨兵模式
https://blog.csdn.net/lihongtai/article/details/82826809
- Python Pycharm 专题
http://www.themesmap.com/theme.html?t=time&page=3 一些好的主题地址 直接导入import settings就可以使用了
- 网络之TCP握手总结
目录: 31.Tcp握手的一些问题? 21.Tcp三次握手及SYN攻击: 四次握手? 为什么建立连接是三次握手,而关闭连接却是四次挥手? 13.TCP释放连接四次握手 12.TCP建立连接三次握手 1 ...
- 查询 SQL_Server 所有表的记录数: for xml path
--我加了 top 10 用的时候可以去掉 declare @select_alltableCount varchar(max)='';with T as (select top 10 'SELECT ...
- redis消息通知(任务队列/优先级队列/发布订阅模式)
1.任务队列 对于发送邮件或者是复杂计算这样的操作,常常需要比较长的时间,为了不影响web应用的正常使用,避免页面显示被阻塞,常常会将此类任务存入任务队列交由专门的进程去处理. 队列最基础的方法如下: ...
- 性能测试day07_性能瓶颈和分析
其实如果之前都做的很到位的话,那么再加上APM工具(dynaTrace等),监控到非常细节,那么我们跑一个业务,我们就能完全清楚的知道每个请求的时间,也能知道请求所产生sql的时间,这样你自然而然都知 ...
- shell数组的使用
定义: array=(1 2 3) echo ${array[0]} echo ${array[1]} echo ${array[2]} echo ${array[*]} 所有元素 echo $ ...