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

 以上爲僞代碼示範過程。 session

相關文章
相關標籤/搜索