标 题: 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