- #include <afxinet.h>
- // 设置超时
- CInternetSession session;
- session.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT, 2000);
- session.SetOption(INTERNET_OPTION_CONNECT_RETRIES, 3);
- session.SetOption(INTERNET_OPTION_SEND_TIMEOUT, 10000);
- session.SetOption(INTERNET_OPTION_RECEIVE_TIMEOUT, 20000);
- // 打开HTTP连接
- CHttpConnection *pHttpConnection = session.GetHttpConnection(strHost, INTERNET_FLAG_KEEP_CONNECTION, iport);
- if (NULL == pHttpConnection)
- {
- return false;
- }
- // 开启一个HTTP请求
- CHttpFile *pHttpFile = pHttpConnection->OpenRequest(_T("POST"), strRequestUrl, NULL, 1, NULL, NULL, INTERNET_FLAG_KEEP_CONNECTION);
- if (NULL == pHttpFile) {
- return false;
- }
- // 设置HTTP请求包头
- pHttpFile->AddRequestHeaders(_T("User-Agent: MYPRODUCT/1.0.0 (Windows)"));
- pHttpFile->AddRequestHeaders(_T("Content-Type: application/octet-stream"));
- pHttpFile->AddRequestHeaders(_T("Charset: UTF-8"));
- // 发送数据
- BOOL bResult = pHttpFile->SendRequest(NULL, 0, (LPVOID)output.data(), (DWORD)output.length());
- if (!bResult) {
- return false;
- }
- // 查询状态
- DWORD dwHttpCode = 0;
- bResult = pHttpFile->QueryInfoStatusCode(dwHttpCode);
- if (!bResult)
- {
- return false;
- }
- // 出错的原因
- if ((dwHttpCode < 200) || (dwHttpCode >= 300))
- {
- BOOL bResult = pHttpFile->QueryInfo(HTTP_QUERY_STATUS_TEXT, szBuffer, &dwBufferSize);
- }
- // 接收响应
- while ((nReadBytes = pHttpFile->Read((void*)szBuffer, 4096)) > 0)
- {
- buffer.write(szBuffer, nReadBytes);
- memset(szBuffer, 0, 4096 * sizeof(char));
- }
- // 释放资源
- if (NULL != pHttpFile) {
- pHttpFile->Close();
- delete pHttpFile;
- pHttpFile = NULL;
- }
- if (NULL != pHttpConnection) {
- pHttpConnection->Close();
- delete pHttpConnection;
- pHttpConnection = NULL;
- }
- session.Close();