#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();
以上为伪代码示范过程。 session