函数封装--获取网页内容





#include <iostream>
#include <wininet.h>
#pragma   comment   (lib,   "wininet.lib")


	
//参数说明:Url   网址
//rst   获取的html信息保存的变量
//keepPath   保存的文件路径   
//说明:如果存在保存路径 ,rst将为“”
bool _GetFromURL(const char *Url, std::string &rst, const std::string keepPath = "")
	{
		bool isGet = false;
		HINTERNET hSession = InternetOpenA("RookIE/1.0", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
		if (hSession != NULL)
		{
			HINTERNET handle2 = InternetOpenUrlA(hSession, Url, NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);
			if (handle2 != NULL)
			{
				char Temp[MAXBLOCKSIZE + 1]; //预留以为保留0
				ULONG Number = 1;

				std::ofstream ofs(keepPath);// "d:\\baidu.txt");
				int step = 0;
				while (Number > 0)
				{
					isGet = true;
					InternetReadFile(handle2, Temp, MAXBLOCKSIZE - 1, &Number);
					if (!Number) //add -- 2017-11-17
					{
						step = 0;
						break;
					}
					Temp[Number] = 0;  //将末尾附上截断符号0
					//因为网址内容一般都为UTF-8形式,所以需要转换字节才能正常显示
					char * Buff = StringAct::ConvertUtf8ToGBK(Temp);
					if (ofs)
						ofs << Buff;
					else
						rst += Buff;
					StringAct::freeChar(Buff);

				}
				if (ofs)
					ofs.close();

				InternetCloseHandle(handle2);
				handle2 = NULL;
			}
			InternetCloseHandle(hSession);
			hSession = NULL;
		}
		return isGet;
	}


要点:1.char Temp[MAXBLOCKSIZE + 1]; //预留1位保留0
             使得Temp[Number] = 0;  不会有益处操作

           2.Temp[Number] = 0;  //将末尾附上截断符号0
             保证了拷贝正确的字符串长度

           3.StringAct::ConvertUtf8ToGBK(Temp); //转码操作  ---思考下:1.如何转码? 2.并不是所有网页都是UTF-8,那么何时才需要转码   ----可在评论区回复  
             使得网页的html内容能够正常被程序员看到


                       

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值