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;
}

  

时间: 2024-10-12 23:28:47

C++ 提取网页内容系列之二的相关文章

C++ 提取网页内容系列之四

标 题: C++ 提取网页内容系列之四作 者: itdef链 接: http://www.cnblogs.com/itdef/p/4173833.html 欢迎转帖 请保持文本完整并注明出处 将网页内容下载后存入字符串string 或者本地文件后 我们开始进行搜索和查询 获取信息这里使用正则式  使用vs2008  其自带的tr1库(预备标准库) 有正则式库供使用带头文件/**************************************************************

C++ 提取网页内容系列之三

标 题: C++ 提取网页内容系列作 者: itdef链 接: http://www.cnblogs.com/itdef/p/4171203.html 欢迎转帖 请保持文本完整并注明出处

C++ 提取网页内容系列之一

标 题: C++ 提取网页内容系列作 者: itdef链 接: http://www.cnblogs.com/itdef/p/4171179.html 欢迎转帖 请保持文本完整并注明出处 首先分析网页就要下载网页内容 这里给出了两种方案 一种是使用MFC自带函数 代码如下: int GetHttpFileData(CString strUrl,char* szDownloadHtmFileName) { CInternetSession Session("Internet Explorer&qu

位置预测系列(二)

Mining User Mobility Features for Next Place Prediction in Location-based Services 这篇论文主要是预测用户在基于位置的社交网络中的下一次签到地点,是ICDM'12年录用的一篇文章. 1.1 论文概要 在这篇文章中,作者首先将位置预测问题阐述为位置排名问题,即把用户所在城市内的所有签到场所作为候选集,然后根据一定的规则将候选集中的场所进行排名.排名的规则所追求的目标就是尽可能的将用户下一次签到地点排在最前面.然后,作

yum 系列(二) yum 常用命令

yum 系列(二) yum 常用命令 一.yum 常用命令 yum 命令:http://man.linuxde.net/yum yum 是在 Fedora 和 RedHat 以及 SUSE 中基于 rpm 的软件包管理器,它可以使系统管理人员交互和自动化地更细与管理 RPM 软件包,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载.安装. yum 提供了查找.安装.删除某一个.一组甚至全部软件包的命令,而且命令简洁而又好记.

Powershell管理系列(二十六)PowerShell操作之批量导出&导入邮箱

-----提供AD\Exchange\Lync\Sharepoint\CRM\SC\O365等微软产品实施及外包,QQ:185426445.电话18666943750 项目中有时候做跨林邮箱迁移的时候,条件不成熟,比如安全考虑或者其他考虑,不能做双林信任,这样就提出了一个问题,历史邮件需要使用的话怎么办,一个简单高效的解决办法就是从源森林批量导出邮件为.pst文件,在批量导入到目的域森林,具体操作如下: 1.赋予管理账号邮件导入导出权限,命令如下: cls whoami New-Manageme

算法系列之二十三:离散傅立叶变换之音频播放与频谱显示

算法系列之二十三:离散傅立叶变换之音频播放与频谱显示 算法系列之二十三离散傅立叶变换之音频播放与频谱显示 导语 什么是频谱 1 频谱的原理 2 频谱的选择 3 频谱的计算 显示动态频谱 1 实现方法 2 杂项说明 结果展示 导语 频谱和均衡器,几乎是媒体播放程序的必备物件,没有这两个功能的媒体播放程序会被认为不够专业,现在主流的播放器都具备这两个功能,foobar 2000的十八段均衡器就曾经让很多人着迷.在上一篇对离散傅立叶变换介绍的基础上,本篇就进一步介绍一下频谱是怎么回事儿,下一篇继续介绍

hbase源码系列(二)HTable 如何访问客户端

hbase的源码终于搞一个段落了,在接下来的一个月,着重于把看过的源码提炼一下,对一些有意思的主题进行分享一下.继上一篇讲了负载均衡之后,这一篇我们从client开始讲吧,从client到master再到region server,按照这个顺序来开展,网友也可以对自己感兴趣的部分给我留言或者直接联系我的QQ. 现在我们讲一下HTable吧,为什么讲HTable,因为这是我们最常见的一个类,这是我们对hbase中数据的操作的入口. 1.Put操作 下面是一个很简单往hbase插入一条记录的例子.

[Axis2与Eclipse整合开发Web Service系列之二] Top-Down方式,通过WSDL逆向生成服务端(续)

前言 本篇是承接上一篇: [Axis2与Eclipse整合开发Web Service系列之二] Top-Down方式,通过WSDL逆向生成服务端 在上一篇粗略地介绍了如何使用Top-Down的方式创建一个web service .  但是对于如何部署及调用,以及一些细节的部分基本上没有介绍. 应某些博友的要求, 也适逢自己有空, 接下来就详细介绍一下整个部分如何进行. 环境准备 JDK 肯定要安装了, 这个就不多讲了. 1. eclipse  3.5.2 对eclipse 版本的要求其实不是很严