用CHttpFile实现简单的GET/POST数据
一、GET 数据,下载网页,文件等,用于可下载的文件,不能用于服务端运行的程序,比如.aspx文件等,否则会返回500错误。
1
CString 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();
CString strSentence, strWriteName="1.htm";2
CString strFileName="http://localhost/InDesign/" + strWriteName;3

4
CInternetSession sess;5
CHttpFile* fileGet;6
try7
{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
else35
{36
AfxMessageBox("本地文件"+strWriteName+"打开出错.");37
}38
}39
else40
{41
strSentence.Format("打开网页文件出错,错误码:%d", dwStatus);42
AfxMessageBox(strSentence);43
}44
fileGet->Close();45
delete fileGet;46
}47
else48
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
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
try9
{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
else34
{35
strSentence.Format("POST出错,错误码:%d", dwStatus);36
AfxMessageBox(strSentence);37
}38
39
fileGet->Close();40
delete fileGet;41
}42
else43
AfxMessageBox("不能找到网页文件!");44

45
sess.Close();46

--kaixuan's cnblogs

浙公网安备 33010602011771号