自动获取网页源代码(基于WinInet class的实验)
今天陪老爸老妈爬了山,挺累的,本来想明天再来实验的,结果没想到一到晚上人反而兴奋了,所以索性实验完了得了~下面就是本人对WinInet class这个类的实验过程,包括遇到的问题和解决方案。实验环境:windows XP, .net 2003
首先是打开这个页面:http://www.vckbase.com/english/code/internet/get_webpage.shtml.htm,将里面的WebWorld.h和WebWorld.cpp分别添加进自己的工程里(【项目】——【添加新项】),编译,之后就会遇到你的第一个问题:
fatal error C1083: 无法打开包含文件:“WebThief.h”: No such file or directory
这个问题真花费了我不少时间。我翻遍了我的VC文件夹,都找不到这个头文件,到GOOGLE上面去找,也没有提供下载的,也几乎没有人对这个问题提问,即使问了,也是所问非所答。失望之余,决定用英文试试,于是尝试着用关键词“WebThief.h download”在GOOGLE理搜索。果然发现一条有价值信息:“I guess it is a mistake. Replace it with WebWorld.h”我按照这个方法一试。。果然啊,是这个作者把头文件写错了。。- -后来自己仔细一想,这个不是明摆着吗,WebWorld.h肯定应该对应着WebWorld.cpp,只怪自己太心急了。那么继续。
编译通过,链接却出现了错误:
WebWorld.obj : error LNK2019: 无法解析的外部符号 __imp__InternetOpenA@20 ,该符号在函数 “public: __thiscall CWebWorld::CWebWorld(void)” (??0CWebWorld@@QAE@XZ) 中被引用
WebWorld.obj : error LNK2019: 无法解析的外部符号 __imp__InternetCloseHandle@4 ,该符号在函数 “public: virtual __thiscall CWebWorld::~CWebWorld(void)” (??1CWebWorld@@UAE@XZ) 中被引用
WebWorld.obj : error LNK2019: 无法解析的外部符号 __imp__InternetReadFile@16 ,该符号在函数 “public: class ATL::CStringT<char,class StrTraitMFC_DLL<char,class ATL::ChTraitsCRT<char> > > __thiscall CWebWorld::GetWebPage(class ATL::CStringT<char,class StrTraitMFC_DLL<char,class ATL::ChTraitsCRT<char> > > const &)” (?GetWebPage@CWebWorld@@QAE?AV?$CStringT@DV?$StrTraitMFC_DLL@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@ABV23@@Z) 中被引用
WebWorld.obj : error LNK2019: 无法解析的外部符号 __imp__HttpQueryInfoA@20 ,该符号在函数 “public: class ATL::CStringT<char,class StrTraitMFC_DLL<char,class ATL::ChTraitsCRT<char> > > __thiscall CWebWorld::GetWebPage(class ATL::CStringT<char,class StrTraitMFC_DLL<char,class ATL::ChTraitsCRT<char> > > const &)” (?GetWebPage@CWebWorld@@QAE?AV?$CStringT@DV?$StrTraitMFC_DLL@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@ABV23@@Z) 中被引用
WebWorld.obj : error LNK2019: 无法解析的外部符号 __imp__InternetOpenUrlA@24 ,该符号在函数 “public: class ATL::CStringT<char,class StrTraitMFC_DLL<char,class ATL::ChTraitsCRT<char> > > __thiscall CWebWorld::GetWebPage(class ATL::CStringT<char,class StrTraitMFC_DLL<char,class ATL::ChTraitsCRT<char> > > const &)” (?GetWebPage@CWebWorld@@QAE?AV?$CStringT@DV?$StrTraitMFC_DLL@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@ABV23@@Z) 中被引用
Debug/HTMLSource.exe : fatal error LNK1120: 5 个无法解析的外部命令
这个我比较幸运,一搜就找到了解决方案:http://topic.csdn.net/t/20050330/12/3893951.html,就是在WebWorld.cpp里添加“#pragma comment(lib,”Wininet.lib”)”,再一试果然就可以了。不过我还不明白这是为什么,希望有高人能给我指点一下,感激不尽。
最后别忘了把WebWorld.h添加到你的项目中。我比较喜欢用基于对话框的VC程序,做了一个按钮控件,在其中添加代码:
CWebWorld a;
CString PageContent;
PageContent = a.GetWebPage("http://www.vckbase.com/english/code/internet/get_webpage.shtml.htm");
MessageBox(PageContent);
最后点击按钮,会弹出这个网页的源文件,试验成功!

最近评论