用WinINet方法实现网页的读取。第一部分是用GET方式,第二部分用POST方式。
GET方式和POST方式是向网页发送数据的两种方式,他们之间的详细差异你可以查阅RFC文档,但简单说来,你读取“http://server/cgi.dll?a=1&b=2&c=3&d=4”这一页时,你就往“http://server/cgi.dll”这个网页用GET方式发送了a=1,b=2,c=3,d=4这几个数值。
回头来说MFC中关于网络传输的几个类,CInternetSession和CHttpFile; CHttpFile是CStdioFile的子类,只要把网络上的一个文件用CHttpFile打开了,就可以象CStdioFile一样ReadString了,所以只要用CInternetSession类打开这个文件就可以了。
以下程序是中文网址自助系统在从网上查找新模板并导入的源程序。程序先用sess.OpenURL(strFileName)取得句柄,然后用fileGet->QueryInfo来查找是否存在该文件。根据HTTP协议,如果存在此文件并且一切正常,返回值就会在200-300之间。剩下的事情就是正常的文本文件的读写:
while(fileGet->ReadString(strSentence))
fileWrite.WriteString(strSentence+"/n");
fileWrite.Close();
掌握了读取网页的技术,同时也就能够用GET方式来发送数据了,例如把strWriteName改成“progsave.asp?curl=中国人&http=http://www.chinaren.com” 你就能够向松鼠之家提交你的中文网址。
可是,GET方式来发送数据有一个限制,就是发送的数据不能太长。具体数值我没有查到,但是当strWriteName的长度大于3000字节时就会出错。为了让用户一次能传送更多的中文网址,我采取了POST的方式发送。当然, POST方式同样也有长度限制,但是比起GET更长得多。请看下一页:
用POST方式发送数据以下程序在NT4,VISUAL C6.0上调试通过。
CString strWriteName="Template01.htm"
#ifndef _DEBUG
strFileName="http://www.fadshop.net/curl/" + strWriteName;
#else //如果是DEBUG版本就在本机的IIS上读取。
strFileName="http://mycomputer/fadshop/curl/" + strWriteName;
#endif
CInternetSession sess;//建立会话
CHttpFile* fileGet;
CException* e;
TRY
{
fileGet=(CHttpFile*)sess.OpenURL(strFileName);//打开文件
}
CATCH_ALL(e)
{
fileGet = 0;
}
END_CATCH_ALL
if(fileGet)
{
DWORD dwStatus;
DWORD dwBuffLen = sizeof(dwStatus);
BOOL bSuccess = fileGet->QueryInfo(
HTTP_QUERY_STATUS_CODE|HTTP_QUERY_FLAG_NUMBER,
&dwStatus, &dwBuffLen);
if( bSuccess && dwStatus>= 200&& dwStatus<300 )
{ CStdioFile fileWrite;
if(fileWrite.Open(strWriteName, CFile::modeWrite|CFile::modeCreate))
{ while(fileGet->ReadString(strSentence)){
fileWrite.WriteString(strSentence+"/n");
}
fileWrite.Close();
SetDlgItemText(IDC_DOWNMSG, "下载完毕,正在导入...");
导入该文件,与本话题无关
}// if openfile success.
else
SetDlgItemText(IDC_DOWNMSG,
"本地文件"+strWriteName+"打开出错/n请检查您的硬盘是否没有空间。");
} // if bSuccess.
else
SetDlgItemText(IDC_DOWNMSG,
"网上没有更新的中文网址模板/n请下次再执行,或者到松鼠之家查看最新信息。");
fileGet->Close();
delete fileGet;
}
else
SetDlgItemText(IDC_DOWNMSG, "网络不通,请检查你的网络连接情况。");
sess.Close();
分享到:
相关推荐
VC编程实现使用WinInet通过HTTP协议读取网上文件,成功实现,在visual studio 2005下可用
VC编程实现使用WinInet通过HTTP协议读取网上文件
wininet实现GET和POST访问网页 易语言在线自学
MFC WinInet类实现FTP客户端功能MFC WinInet类实现FTP客户端功能MFC WinInet类实现FTP客户端功能MFC WinInet类实现FTP客户端功能MFC WinInet类实现FTP客户端功能
Wininet SSL 实现http 数据上传,Wininet SSL 实现http 数据上传
wininet编程精髓,网页编程必备入门知识。
VC 6.0 使用WinInet通过HTTP协议读取网上文件 在一个按钮事件中定义了网络连接Session: CInternetSession httpsession;//定义网络连接Session CString Line; CInternetFile* webfile=NULL;//定义一个文件...
利用WinInet实现文件下载 利用WinInet实现文件下载 利用WinInet实现文件下载 利用WinInet实现文件下载
代码如下:#include <stdio>#include <windows>#include <wininet>#define MAXSIZE 1024#pragma comment(lib, “Wininet.lib”) void urlopen(_TCHAR*); int _tmain(int argc, _TCHAR* argv[]){ urlopen(_T(“//...
vs2019下使用winInet实现的http客户端。功能实现:实现get、post、post上传文件,basic认证
vc++中通过wininet函数获取网页的内容,用途广泛。
Wininet实现网络检测 最简单明了的实例 VC6.0
用C++实现的HTTP Web下载,两种方式实现: 1.WinInet(这种方式很简单,但不是很灵活) 2.WinSock(也就是Socket,这种方式有点繁琐,但是可以自定义发送HTTP的报文头和接收响应头,很灵活) 因作者编程水平有限,...
VC编程实现使用WinInet通过HTTP协议读取网上文件
Delphi用WinInet实现服务器信息获取、上传Json信息、文件下载
可以使用HTTP GET向HTTP服务器发送请求(用于请求一个URL对应的内容),使用HTTP POST想HTTP服务器发送数据(用于传递文件和提交表单),以及处理CHttpResponse回来的数据,另外加入了严格的异常检测。附件里同时...