使用vc连接指定url获得其HTML的代码
2011-09-19 23:41
239 查看
使用vc连接指定url获得其HTML的代码
最近只是忙于那个mona边边脚脚的一些工作,所以也没有什么好的与现在项目有关的实现代码,前面我也自己说过我会不断的去整理前面自己的工作日志,也会陆续的将自己现在工作中的一些重点代码贴出来大家共享,所以我不会失信的,至少作为一名非常志同于软件共享的人员,虽然自己不是什么高手,菜鸟级也就是凑合毕业,但是我还是要跟一些朋友进行共享,也许我帮不到你,也许我会帮你很多很多,总之只要能够帮到你就好,记得如果看过了,您也有时间记得发表个评论,我也知道自己改怎么去不断的完善自己的代码,该发表一些什么样的代码来大家共享,看过的书上例子每次看过我都感觉是这样的例子也太简单了嘛,简直忽略了自己智商,可是当我要真正的在项目中应用它时,在项目中真正的去跟其他关联的时候才发现原来这都不是随便的例子,如果你只是照着书本上的去实做,可能对你理解vc环境绝对有帮助,可是对你用vc进行项目开发,如果不去对实例进行思考,它能用于什么地方,与什么结合,那么等到真正的涉及到项目时,你就会发现原来自己真的什么也不会唷。
我是从最菜鸟的走到菜鸟的刚刚及格,这些是我在真正的项目中最大的感受,有时候为了只是实现一个功能,我会想方设法的去测试,有时候还在想以前就明明练习过这个例子,可是当时为什么没有去思考,为什么没有想到会应用到这个方面呢。很多的很多的感概,慢慢我开始有点掌握方向。说实话我的工作经验还不足一年,对一些真正的大的项目也不是很清楚,但是作为技术开发人员,这工作的时间给我最大的收获就是,只要你有需求我就没有做不到的,我知道根据需求我该怎么去操作。其实想想这些已经足够了,我还不到30岁,在以后走的路很长也学荣幸的话我又进入一家软件公司我会安定下自己的心思,逐步的去对每一个项目去思考,去积累更多更广的经验。我对自己的未来充满信心,尽管现在的我有些迷茫,这是人生的十字路口,我从来没有这么理智的去思考过自己该怎么走好以后的路,我发现原来的激情依然存在,社会的腐蚀也是一点点的渗透,我开始去接收这些,要去成熟面对一切了,IT泡沫还是继续吗?现有的技术真的已经达到了那么高智能化了吗,如果人们就是以现在的科技水平说是IT已经开始走滑坡路,这说明这个人充其量是IT的看客,真正的智能化IT产业还没有开始,现在的工控制造越来越热,很多的企业工厂都在慢慢的走向自动化,智能化,但是背后的自动化智能化都是有人来操纵的。所以说IT的泡沫不属于我们技术人员,只是属于那些在IT中炒作资金的人,说白了还是金融界的技术人员。
废话又是一堆,最近的感慨颇多,如果实在饶了您的兴趣,您千万别见怪。好了马上我就把我以前这个使用vc练习过的例子给您贴出来。
u 利用WinInet API 编写HTTP程序的一般步骤:1、调用InternetOpen()完成对Internet DLL 初始化工作,并返回一会话句柄2、用会话句柄调用InternetConnect(),同时设置INTERNET_SERVICE_HTTP标志,开始建立与HTTP服务器的连接,并返回一个连接句柄3、利用连接句柄调用HttpOpenRequest()或HttpOpenReQuestEx()函数打开一个HTTP请求,并返回Internet句柄,该句柄可以用于其它的HTTP函数4、利用Internet句柄调用HttpSendRequest()或HttpSendRequestEx()函数建立与HTTP服务器连接,并真正将请求发送到指定的站点5、如果HttpSendRequest()或HttpSendRequestEx()返回的句柄有效,那么就可以有HttpSendRequest()或HttpSendRequestEx()返回的句柄进行诸如上传输局、查询信息或下载数据等操作。
u 在实际程序当中对实现源代码的下载显示如下设置
void CCodeDlg::ShowCode(CString strUrl)
{
//判断地址是否有效,如果空或开头7个字符不是"http://"
if (strUrl.IsEmpty()||strUrl.Left(7)!="http://")
{
AfxMessageBox("请输入正确的URL地址!");
return;
}
//解析地址,得到服务器名字和文件路径名
ParseURL(strUrl);
//第一步:初始化internet DLL,这是第一个被调用的函数
HINTERNET hSession=::InternetOpen("Raw HTML Reader",PRE_CONFIG_INTERNET_ACCESS,"",INTERNET_INVALID_PORT_NUMBER,0);
//判断会话句柄是否有效
if(hSession==NULL)
{
AfxMessageBox("无法连接Internet!");
return;
}
//第二步:初始化HTTP session
HINTERNET hConnect=::InternetConnect(hSession,m_strServer,INTERNET_INVALID_PORT_NUMBER,NULL,"",INTERNET_SERVICE_HTTP,0,0);
//判断连接句柄是否有效
if(hConnect==NULL)
{
AfxMessageBox("无法连接Internet!");
//关闭会话句柄
VERIFY(::InternetCloseHandle(hSession));
return;
}
//第三步:打开一个HTTP请求句柄
HINTERNET hHttpFile=::HttpOpenRequest(hConnect,"GET",m_strPath,HTTP_VERSION,NULL,0,INTERNET_FLAG_DONT_CACHE,0);
//判断句柄是否有效
if(hHttpFile==NULL)
{
AfxMessageBox("Http request failed!");
VERIFY(::InternetCloseHandle(hConnect));
VERIFY(::InternetCloseHandle(hSession));
return;
}
//显示等待光标
CWaitCursor wait;
//第四步:发出请求
BOOL bSendRequest=::HttpSendRequest(hHttpFile,NULL,0,0,0);
if(bSendRequest)
{
//得到文件的大小
char achQueryBuf[16];
DWORD dwFileSize;
DWORD dwQueryBufLen=sizeof(achQueryBuf);
BOOL bQuery=::HttpQueryInfo(hHttpFile,HTTP_QUERY_CONTENT_LENGTH,achQueryBuf,&dwQueryBufLen,NULL);
if(bQuery)
{
//查找成功,指出需要存放文件的内存大小
dwFileSize=(DWORD)atol(achQueryBuf);
}
else
{
//失败,猜出一个最大文件数
dwFileSize=10*1024;
}
//分配一个缓冲区给文件数据
char *lpszBuf=new char[dwFileSize+1];
//读文件
DWORD dwBytesRead;
BOOL bRead=::InternetReadFile(hHttpFile,lpszBuf,dwFileSize+1,&dwBytesRead);
//显示HTML的源码
//DisplayRawHtml(lpszBuf);
m_editHtml.SetWindowText((LPCTSTR)lpszBuf);
//清除缓冲区
delete lpszBuf;
//关闭INTERNET句柄
VERIFY(::InternetCloseHandle(hHttpFile));
VERIFY(::InternetCloseHandle(hConnect));
VERIFY(::InternetCloseHandle(hSession));
}
}
对网页的链接显示如下设置:
void CHttpExpView::OnShowhtml()
{
// TODO: Add your command handler code here
// TODO: Add your command handler code here
//创建CCodeDlg对话框
CCodeDlg dlg;
//将URL地址传递给CCodeDlg对话框
dlg.m_strUrl=m_strUrl;
//显示CCodeDlg对话框
dlg.DoModal();
}
最近只是忙于那个mona边边脚脚的一些工作,所以也没有什么好的与现在项目有关的实现代码,前面我也自己说过我会不断的去整理前面自己的工作日志,也会陆续的将自己现在工作中的一些重点代码贴出来大家共享,所以我不会失信的,至少作为一名非常志同于软件共享的人员,虽然自己不是什么高手,菜鸟级也就是凑合毕业,但是我还是要跟一些朋友进行共享,也许我帮不到你,也许我会帮你很多很多,总之只要能够帮到你就好,记得如果看过了,您也有时间记得发表个评论,我也知道自己改怎么去不断的完善自己的代码,该发表一些什么样的代码来大家共享,看过的书上例子每次看过我都感觉是这样的例子也太简单了嘛,简直忽略了自己智商,可是当我要真正的在项目中应用它时,在项目中真正的去跟其他关联的时候才发现原来这都不是随便的例子,如果你只是照着书本上的去实做,可能对你理解vc环境绝对有帮助,可是对你用vc进行项目开发,如果不去对实例进行思考,它能用于什么地方,与什么结合,那么等到真正的涉及到项目时,你就会发现原来自己真的什么也不会唷。
我是从最菜鸟的走到菜鸟的刚刚及格,这些是我在真正的项目中最大的感受,有时候为了只是实现一个功能,我会想方设法的去测试,有时候还在想以前就明明练习过这个例子,可是当时为什么没有去思考,为什么没有想到会应用到这个方面呢。很多的很多的感概,慢慢我开始有点掌握方向。说实话我的工作经验还不足一年,对一些真正的大的项目也不是很清楚,但是作为技术开发人员,这工作的时间给我最大的收获就是,只要你有需求我就没有做不到的,我知道根据需求我该怎么去操作。其实想想这些已经足够了,我还不到30岁,在以后走的路很长也学荣幸的话我又进入一家软件公司我会安定下自己的心思,逐步的去对每一个项目去思考,去积累更多更广的经验。我对自己的未来充满信心,尽管现在的我有些迷茫,这是人生的十字路口,我从来没有这么理智的去思考过自己该怎么走好以后的路,我发现原来的激情依然存在,社会的腐蚀也是一点点的渗透,我开始去接收这些,要去成熟面对一切了,IT泡沫还是继续吗?现有的技术真的已经达到了那么高智能化了吗,如果人们就是以现在的科技水平说是IT已经开始走滑坡路,这说明这个人充其量是IT的看客,真正的智能化IT产业还没有开始,现在的工控制造越来越热,很多的企业工厂都在慢慢的走向自动化,智能化,但是背后的自动化智能化都是有人来操纵的。所以说IT的泡沫不属于我们技术人员,只是属于那些在IT中炒作资金的人,说白了还是金融界的技术人员。
废话又是一堆,最近的感慨颇多,如果实在饶了您的兴趣,您千万别见怪。好了马上我就把我以前这个使用vc练习过的例子给您贴出来。
u 利用WinInet API 编写HTTP程序的一般步骤:1、调用InternetOpen()完成对Internet DLL 初始化工作,并返回一会话句柄2、用会话句柄调用InternetConnect(),同时设置INTERNET_SERVICE_HTTP标志,开始建立与HTTP服务器的连接,并返回一个连接句柄3、利用连接句柄调用HttpOpenRequest()或HttpOpenReQuestEx()函数打开一个HTTP请求,并返回Internet句柄,该句柄可以用于其它的HTTP函数4、利用Internet句柄调用HttpSendRequest()或HttpSendRequestEx()函数建立与HTTP服务器连接,并真正将请求发送到指定的站点5、如果HttpSendRequest()或HttpSendRequestEx()返回的句柄有效,那么就可以有HttpSendRequest()或HttpSendRequestEx()返回的句柄进行诸如上传输局、查询信息或下载数据等操作。
u 在实际程序当中对实现源代码的下载显示如下设置
void CCodeDlg::ShowCode(CString strUrl)
{
//判断地址是否有效,如果空或开头7个字符不是"http://"
if (strUrl.IsEmpty()||strUrl.Left(7)!="http://")
{
AfxMessageBox("请输入正确的URL地址!");
return;
}
//解析地址,得到服务器名字和文件路径名
ParseURL(strUrl);
//第一步:初始化internet DLL,这是第一个被调用的函数
HINTERNET hSession=::InternetOpen("Raw HTML Reader",PRE_CONFIG_INTERNET_ACCESS,"",INTERNET_INVALID_PORT_NUMBER,0);
//判断会话句柄是否有效
if(hSession==NULL)
{
AfxMessageBox("无法连接Internet!");
return;
}
//第二步:初始化HTTP session
HINTERNET hConnect=::InternetConnect(hSession,m_strServer,INTERNET_INVALID_PORT_NUMBER,NULL,"",INTERNET_SERVICE_HTTP,0,0);
//判断连接句柄是否有效
if(hConnect==NULL)
{
AfxMessageBox("无法连接Internet!");
//关闭会话句柄
VERIFY(::InternetCloseHandle(hSession));
return;
}
//第三步:打开一个HTTP请求句柄
HINTERNET hHttpFile=::HttpOpenRequest(hConnect,"GET",m_strPath,HTTP_VERSION,NULL,0,INTERNET_FLAG_DONT_CACHE,0);
//判断句柄是否有效
if(hHttpFile==NULL)
{
AfxMessageBox("Http request failed!");
VERIFY(::InternetCloseHandle(hConnect));
VERIFY(::InternetCloseHandle(hSession));
return;
}
//显示等待光标
CWaitCursor wait;
//第四步:发出请求
BOOL bSendRequest=::HttpSendRequest(hHttpFile,NULL,0,0,0);
if(bSendRequest)
{
//得到文件的大小
char achQueryBuf[16];
DWORD dwFileSize;
DWORD dwQueryBufLen=sizeof(achQueryBuf);
BOOL bQuery=::HttpQueryInfo(hHttpFile,HTTP_QUERY_CONTENT_LENGTH,achQueryBuf,&dwQueryBufLen,NULL);
if(bQuery)
{
//查找成功,指出需要存放文件的内存大小
dwFileSize=(DWORD)atol(achQueryBuf);
}
else
{
//失败,猜出一个最大文件数
dwFileSize=10*1024;
}
//分配一个缓冲区给文件数据
char *lpszBuf=new char[dwFileSize+1];
//读文件
DWORD dwBytesRead;
BOOL bRead=::InternetReadFile(hHttpFile,lpszBuf,dwFileSize+1,&dwBytesRead);
//显示HTML的源码
//DisplayRawHtml(lpszBuf);
m_editHtml.SetWindowText((LPCTSTR)lpszBuf);
//清除缓冲区
delete lpszBuf;
//关闭INTERNET句柄
VERIFY(::InternetCloseHandle(hHttpFile));
VERIFY(::InternetCloseHandle(hConnect));
VERIFY(::InternetCloseHandle(hSession));
}
}
对网页的链接显示如下设置:
void CHttpExpView::OnShowhtml()
{
// TODO: Add your command handler code here
// TODO: Add your command handler code here
//创建CCodeDlg对话框
CCodeDlg dlg;
//将URL地址传递给CCodeDlg对话框
dlg.m_strUrl=m_strUrl;
//显示CCodeDlg对话框
dlg.DoModal();
}
相关文章推荐
- 使用vc连接指定url获得其HTML的代码
- PL/SQL Developer结合oracle精简客户端使用配置错误代码ORA-12154: TNS: 无法解析指定的连接标识符
- 获得指定url的html内容
- VC使用IPicture显示网上图片(通过URL指定)
- android 使用WebView获得加载网页的html代码
- Android应用被卸载后,自动使用 浏览器打开指定连接(或编写C代码执行其他操作)
- C#使用正则表达式获取HTML代码中a标签里包含指定后缀的href的值
- vc获得指定url的本地COOKIE信息
- VC使用IPicture显示网上图片(通过URL指定)
- 10_Android中通过HttpUrlConnection访问网络,Handler和多线程使用,读取网络html代码并显示在界面上,ScrollView组件的使用
- C#中怎么使用系统默认浏览器打开指定的URL(代码实现)
- 10_Android中通过HttpUrlConnection访问网络,Handler和多线程使用,读取网络html代码并显示在界面上,ScrollView组件的使用
- 使用JDBC-ODBC方式连接数据库时,如何在代码中指定ODBC数据源信息
- 获取指定URL网页的HTML代码
- 关于使用WinHtmlEditor控件获得html代码加载到wpf中webbrowser控件上乱码问题
- 使用JavaScript获得tr有多少个(html中指定元素的个数)
- VC中用Ado接口代码连接和使用与数据库
- VC连接数据库 --转载于http://www.blogjava.net/blogpig/archive/2007/06/15/124429.html
- java代码内,获得jsp产生的html
- 在Silverlight页面里显示HTML的免费控件下载(附使用方法代码)