📄 teach_sp_14.htm
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb_2312-80">
<meta name="GENERATOR" content="闻怡洋 wyy_cq@cmmail.com">
<title>Visual C++/MFC开发指南</title>
<SCRIPT LANGUAGE='JavaScript' SRC='../../submit_navigate_bar.js'></SCRIPT>
<link REL="stylesheet" HREF="../../main.css">
</head>
<SCRIPT LANGUAGE='JavaScript'>write_body();</SCRIPT>
<SCRIPT LANGUAGE='JavaScript'>write_bar();</SCRIPT>
<p align="center"><a
HREF="http://www.0828.com/pay/cgi-bin/random.cgi?job=go&id=820"
target="_blank">
<img SRC="http://www.0828.com/pay/cgi-bin/random.cgi?id=820" BORDER="0"
width="468" height="60"></a><br>
<font size="2"><a href="http://www.0828.com/pay/index.html"><img border="0"
src="http://www.0828.com/pay/code.gif" width="468" height="15"></a><br>
<small>你每点一下上面的广告我就能有更多的上网时间为大家寻找资料</small></font>
</p>
<table width=98% cellspacing="0" cellpadding="0" align=center><!--整体框架-->
<tr><td>
<table border=0 width="100%" cellspacing="0" cellpadding="2"><!--标记放置区域-->
<tr>
<td width="30%" align="center" bgcolor="#8E8E8E" valign=middle><img src=../../img/brand_200_60.gif width=200 height=60 alt="LOGO1"></td>
<td width="70%" align="center" bgcolor="#8E8E8E" valign=middle><img src=../../img/logo_400_60.gif width=400 height=60 alt="LOGO2"></td>
</tr>
<tr>
<td colspan="2" bgcolor="#939393" align=center><font color=white>您当前位置</font> <a href=../../index.htm><font color=white>首页</font></a> <a href=../index.htm><font color=white>开发教程</font></a> <a href=index.htm><font color=white><font class=engul>Visual C++/MFC</font>专题讲座</font></a> <font color=white>1.4 利用<font class=eng>WinInet</font>开发<font class=eng>Internet</font>程序</font> <font color=white><SCRIPT LANGUAGE='JavaScript'>write_command();</SCRIPT></font></td>
</tr>
</table><!--标记放置区域 END-->
<table border=0 width=100% cellspacing="0" cellpadding="0">
<tr bgcolor="#F4F4F4">
<td><!-- article title begin here-->
<br>
<p align=center><big>1.4 利用<font class=eng>WinInet</font>开发<font class=eng>Internet</font>程序</big></p>
<table border=0 align=center width=100%>
<tr><td><small>
<!-- article content begin here-->
<p>M$所提供的WinInet开发包是作为ActiveX技术中的一部分,后来MS对WinInet API进行了包装并提供了相应的MFC类。WinNet开发包的作用是提供了对HTTP FTP Gopher协议的支持,使开发者在开发Internet程序时避免编写底层协议相关的代码。此外WinInet很多功能都是与IE有联系的,比如说可以使用IE中的设置和使用IE缓存中的数据。本节主要将内容集中在HTTP协议的使用上。</p>
<p>WinInet中的CInternetSession是管理会话的类,一般来讲如果要使用WinInet功能都需要建立一个会话,然后在该会话的基础上使用数据存取功能。CInternetSession的构造函数中接收四个参数
<pre>CInternetSession( LPCTSTR pstrAgent = NULL, //应用程序名,可以自己定义
DWORD dwContext = 1, //上下文标记,如果使用回调功能时这个值将给传送给回调函数
DWORD dwAccessType = INTERNET_OPEN_TYPE_PRECONFIG, //
LPCTSTR pstrProxyName = NULL, //CERN代理服务器地址,一般设置为NULL
LPCTSTR pstrProxyBypass = NULL, //代理服务器地址
DWORD dwFlags = 0 );//标记,一般设置为0
</pre>
</p>
<p>
dwAccessType可以为:<ul>
<li>INTERNET_OPEN_TYPE_PRECONFIG 使用IE中的连接设置</li>
<li>INTERNET_OPEN_TYPE_DIRECT 直接连接到服务器</li>
<li>INTERNET_OPEN_TYPE_PROXY 通过代理服务器进行连接</li>
</ul>
</p>
<p>
当dwAccessType为INTERNET_OPEN_TYPE_PROXY时指明代理服务器地址。
</p>
<p>dwFlags可以为:<ul>
<li>INTERNET_FLAG_DONT_CACHE 不在缓存中保存取得的内容</li>
<li>INTERNET_FLAG_OFFLINE 脱机方式,</li>
<li></li>
</ul>
</p>
<p>在建立会话后就可以利用CInternetSession::OpenURL打开一个URL,并读取数据,函数原型为:
<pre>
CStdioFile* OpenURL( LPCTSTR pstrURL, //文件URL地址
DWORD dwContext = 1, //上下文ID
DWORD dwFlags = INTERNET_FLAG_TRANSFER_ASCII, //标记
LPCTSTR pstrHeaders = NULL, //发送到服务器的数据头
DWORD dwHeadersLength = 0 );//发送到服务器的数据头长度
</pre>
dwFlags可以为:<ul>
<li>INTERNET_FLAG_RELOAD 强制重读数据</li>
<li>INTERNET_FLAG_DONT_CACHE 不保存到缓存</li>
<li>INTERNET_FLAG_TRANSFER_ASCII 使用文本数据</li>
<li>INTERNET_FLAG_TRANSFER_BINARY 使用二进制数据</li>
</ul>
</p>
<p>OpenURL的返回值为CStdioFile文件指针,函数会根据使用的协议返回不同的文件类指针,但这些类都是CStdioFile的派生类。
<table border=1 cellpadding=5 cols=2 >
<tr valign=top>
<td class=label width=50%><b>URL type</b></td>
<td class=label width=50%><b>Returns</b></td>
</tr>
<tr valign=top>
<td width=50%>file://</td>
<td width=50%><b>CStdioFile*</b></td>
</tr>
<tr valign=top>
<td width=50%>http://</td>
<td width=50%><b>CHttpFile*</b></td>
</tr>
<tr valign=top>
<td width=50%>gopher://</td>
<td width=50%><b>CGopherFile*</b></td>
</tr>
<tr valign=top>
<td width=50%>ftp://</td>
<td width=50%><b>CInternetFile*</b></td>
</tr>
</table>
然后通过CStdioFile::ReadString来读取文件内容。
</p>
<p>本文给出的例子就是利用WinInet通过HTTP协议读取网上文件。<br>
<img src=sp_teach_141.gif></p>
<p>完成这一功能的代码非常简单,当然代码中少了各种错误检测。<pre>
void CSp_14Dlg::GetURL(void)
{
UpdateData();
CInternetSession sess;//建立会话
CHttpFile* pF=(CHttpFile*)sess.OpenURL(m_szURL);//打开文件
CString szData,szAllData;
while(pF->ReadString(szData))
{//读取文件
szAllData+="\r\n";
szAllData+=szData;
}
pF->Close();
sess.Close();
m_szHTML=szAllData;
UpdateData(FALSE);
}
</pre><a href=sam_sp_teach_141.zip>下载示范代码</a></p>
<p>这里我只讲了最简单的应用,如果你需要更强的控制性或是发送表单(FORM),则需要生成CHttpConnection对象和CHttpFile对象。</p>
<p></p>
<p></p>
<p></p>
<!-- article content end-->
<p align=center><a href=index.htm#charpter1>返回</a></p>
</td></tr>
</table>
<p align=center><small>版权所有 闻怡洋 <a href=http://www.vchelp.net/><font class=engul>http://www.vchelp.net/<font></a></small></p>
</td>
</tr><!-- article title end-->
</table>
</td></tr></table><!--整体框架 END-->
<!--- BEGIN CLICK2NET CODE --->
<center><a href="http://redirect.click2net.com/?A056824,92" target="_blank">
<img border=0 alt="你每点一下广告我就能有更多的上网时间为大家寻找资料" src="http://image.click2net.com/?A056824,92" width="468" height="60"></a>
<br><font style=small class=engul><a href="http://www.click2net.com/" target="_blank">Free Advertising from Click2Net!</a></font></center>
<!--- END CLICK2NET CODE --->
<SCRIPT LANGUAGE='JavaScript'>write_tail();</SCRIPT>
</body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -