Windows MFC HTTP POST请求 函数流程

Posted diaoss

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Windows MFC HTTP POST请求 函数流程相关的知识,希望对你有一定的参考价值。

Windows MFC HTTP POST请求 函数流程

  1 CString m_strHttpUrl(_T("http://10.200.80.86:8090/course/upload"))
  2 CInternetSession * pInternetSession = NULL;
  3 CHttpConnection * pHttpConnection = NULL;
  4 CHttpFile * pHttpFile = NULL;
  5 
  6 
  7 
  8 //建立连接
  9 pInternetSession = new CInternetSession(AfxGetAppName());
 10 
 11 
 12 CString strServer;
 13 CString strObject;
 14 DWORD dwServiceType;
 15 INTERNET_PORT nPort;
 16 AfxParseURL(m_strHttpUrl, dwServiceType, strServer, strObject, nPort);
 17 
 18 
 19 try
 20 
 21     pHttpConnection = pInternetSession->GetHttpConnection(strServer, nPort);
 22 
 23 catch (CInternetException* e)
 24 
 25     CString strError;
 26     strError.Format(_T("GetHttpConnection Error: %u, Context: %u"), e->m_dwError, e->m_dwContext);
 27     AfxMessageBox(strError);
 28 
 29     if (NULL != pHttpConnection)
 30     
 31         pHttpConnection->Close();
 32         delete pHttpConnection;
 33         pHttpConnection = NULL;
 34     
 35     if (NULL != pInternetSession)
 36     
 37         pInternetSession->Close();
 38         delete pInternetSession;
 39         pInternetSession = NULL;
 40     
 41 
 42     return FALSE;
 43 
 44 
 45 
 46 strParam.Format(_T("?ccvid=%s&format=%s&time=%I64u"),
 47     m_strVideoid, g_strFormat, currentTime);
 48 strParam.AppendFormat(_T("&hash=%s"), sHash.c_str());
 49 
 50 CString strTempObject = strObject + strParam;
 51 pHttpFile = pHttpConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST, strTempObject);
 52 if (NULL == pHttpFile)
 53 
 54     AfxMessageBox(_T("OpenRequest Error."));
 55 
 56     if (NULL != pHttpFile)
 57     
 58         pHttpFile->Close();
 59         delete pHttpFile;
 60         pHttpFile = NULL;
 61     
 62     if (NULL != pHttpConnection)
 63     
 64         pHttpConnection->Close();
 65         delete pHttpConnection;
 66         pHttpConnection = NULL;
 67     
 68     if (NULL != pInternetSession)
 69     
 70         pInternetSession->Close();
 71         delete pInternetSession;
 72         pInternetSession = NULL;
 73     
 74 
 75     return FALSE;
 76 
 77 
 78     
 79 pHttpFile->AddRequestHeaders(_T("Accept: *,*/*"));
 80 pHttpFile->AddRequestHeaders(_T("Accept-Language: zh-cn"));
 81 pHttpFile->AddRequestHeaders(_T("Content-Type: application/x-www-form-urlencoded; charset=utf-8"));
 82 //pHttpFile->AddRequestHeaders(_T("Content-Type: application/json; charset=utf-8"));
 83 pHttpFile->AddRequestHeaders(_T("Accept-Encoding: gzip, deflate"));
 84 strContentRange.Format(, m_startLen, m_endLen - 1, fileLen);
 85 pHttpFile->AddRequestHeaders(_T("Content-Range: bytes %x-%y/%z"));
 86 
 87 
 88 CString strReq;
 89 strReq.Format(_T("courseFullName=%s&courseName=%s&grade=%s&lesson=%s&liveRoomId=%s&section=%s&teacherName=%s&type=%s&recordingTime=%s-%s-%s"),
 90     strVideoName, strTopic, strGrade, strNum, strLiveRoom, strStage, strTeacher, strSubject, strYear, strMonth, strDay);
 91 strStart.Format(_T("--%s\r\nContent-Disposition: form-data;name=\"file%s\";filename=\"%s\"\r\nContent-Type: application/octet-stream\r\n\r\n"),
 92     strBOUNDARY, m_strVideoName, m_strVideoName);
 93 strEnd.Format(_T("\r\n--%s--\r\n"),
 94 try
 95 
 96     pHttpFile->SendRequest(NULL, 0, strReq.GetBuffer(), strReq.GetLength());    //len注意
 97 
 98 catch (CInternetException* e)
 99 
100     CString strError;
101     strError.Format(_T("SendRequest Error: %u, Context: %u"), e->m_dwError, e->m_dwContext);
102     AfxMessageBox(strError);
103 
104     if (NULL != pHttpFile)
105     
106         pHttpFile->Close();
107         delete pHttpFile;
108         pHttpFile = NULL;
109     
110     if (NULL != pHttpConnection)
111     
112         pHttpConnection->Close();
113         delete pHttpConnection;
114         pHttpConnection = NULL;
115     
116     if (NULL != pInternetSession)
117     
118         pInternetSession->Close();
119         delete pInternetSession;
120         pInternetSession = NULL;
121     
122 
123     return FALSE;
124 
125 
126 
127 char szChars[1024 + 1] =  0 ;
128 CString strRawResponse;
129 UINT nReaded = 0;
130 while ((nReaded = pHttpFile->Read((void*)szChars, 1024)) > 0)
131 
132     szChars[nReaded] = \0;
133     strRawResponse += szChars;
134     memset(szChars, 0, 1024 + 1);
135 
136 
137 AfxMessageBox(strRawResponse);
138 
139 
140 if (NULL != pHttpFile)
141 
142     pHttpFile->Close();
143     delete pHttpFile;
144     pHttpFile = NULL;
145 
146 if (NULL != pHttpConnection)
147 
148     pHttpConnection->Close();
149     delete pHttpConnection;
150     pHttpConnection = NULL;
151 
152 if (NULL != pInternetSession)
153 
154     pInternetSession->Close();
155     delete pInternetSession;
156     pInternetSession = NULL;
157 
158 
159 
160 return TRUE;

 

以上是关于Windows MFC HTTP POST请求 函数流程的主要内容,如果未能解决你的问题,请参考以下文章

如何捕获从 MFC Web 浏览器 C++ 发出的 GET/POST 请求

windows iis 禁用除了GET和POST之外的请求方法

Node.js 路由

从http请求中 获得请求参数 应该调用哪个方法

使用 C# 在 Windows 8 Metro App 上发送 POST 请求

ProjectInstaller 安装的 WCF Windows 服务无法处理 POST 请求