首页 > 代码库 > C++ 提取网页内容系列之二
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++ 提取网页内容系列之二
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。