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();

 以上为伪代码示范过程。 

猜你喜欢

转载自www.cnblogs.com/manongdashu/p/10338826.html
今日推荐