用CHttpFile实现简单的GET/POST数据
转自:http://www.cnblogs.com/kaixuan/archive/2008/01/31/1060233.html
一、GET 数据,下载网页,文件等,用于可下载的文件,不能用于服务端运行的程序,比如.aspx文件等,否则会返回500错误。
1CString strSentence, strWriteName="1.htm";
2 CString strFileName="http://localhost/InDesign/" + strWriteName;
3
4 CInternetSession sess;
5 CHttpFile* fileGet;
6 try
7 {
8 fileGet=(CHttpFile*)sess.OpenURL(strFileName);
9 }
10 catch(CException* e)
11 {
12 fileGet = 0;
13 throw;
14 }
15
16 if(fileGet)
17 {
18 DWORD dwStatus;
19 DWORD dwBuffLen = sizeof(dwStatus);
20 BOOL bSuccess = fileGet->QueryInfo(HTTP_QUERY_STATUS_CODE|HTTP_QUERY_FLAG_NUMBER, &dwStatus, &dwBuffLen);
21
22 if( bSuccess && dwStatus>= 200&& dwStatus<300 )
23 {
24 CStdioFile fileWrite;
25 if(fileWrite.Open(strWriteName, CFile::modeWrite|CFile::modeCreate))
26 {
27 while(fileGet->ReadString(strSentence))
28 {
29 fileWrite.WriteString(strSentence+"\n");
30 }
31 fileWrite.Close();
32 AfxMessageBox("下载完毕");
33 }
34 else
35 {
36 AfxMessageBox("本地文件"+strWriteName+"打开出错.");
37 }
38 }
39 else
40 {
41 strSentence.Format("打开网页文件出错,错误码:%d", dwStatus);
42 AfxMessageBox(strSentence);
43 }
44 fileGet->Close();
45 delete fileGet;
46 }
47 else
48 AfxMessageBox("不能找到网页文件!");
49
50 sess.Close();
二、POST 数据,比如用于提交注册信息等
1 CString strHttpName="http://localhost/TestReg/RegForm.aspx"; // 需要提交数据的页面
2 CString strFormData = "username=abc&password=123"; // 需要提交的数据
3
4 CInternetSession sess;
5 CHttpFile* fileGet;
6 CString strHeaders = _T("Content-Type: application/x-www-form-urlencoded"); // 请求头
7
8 try
9 {
10 fileGet=(CHttpFile*)sess.OpenURL(strHttpName);//打开文件
11 }
12 catch(CException* e)
13 {
14 fileGet = 0;
15 throw;
16 }
17
18 CString strSentence, strGetSentence = "";
19 if(fileGet)
20 {
21 DWORD dwStatus;
22 DWORD dwBuffLen = sizeof(dwStatus);
23 BOOL bSuccess = fileGet->QueryInfo(HTTP_QUERY_STATUS_CODE|HTTP_QUERY_FLAG_NUMBER, &dwStatus, &dwBuffLen);
24 if( bSuccess && dwStatus>= 200 &&dwStatus<300 )
25 {
26 BOOL result = fileGet->SendRequest(strHeaders, (LPVOID)(LPCTSTR)strFormData, strFormData.GetLength());
27 while(fileGet->ReadString(strSentence)) // 读取提交数据后的返回结果
28 {
29 strGetSentence = strGetSentence + strSentence + char(13) + char(10);
30 }
31 AfxMessageBox(strGetSentence); // 显示返回网页内容
32 }
33 else
34 {
35 strSentence.Format("POST出错,错误码:%d", dwStatus);
36 AfxMessageBox(strSentence);
37 }
38
39 fileGet->Close();
40 delete fileGet;
41 }
42 else
43 AfxMessageBox("不能找到网页文件!");
44
45 sess.Close();
46
--kaixuan's cnblogs