MFC实现http连接、发送和接收数据
#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();
以上为伪代码示范过程。
浙公网安备 33010602011771号