⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 httpengine.cpp

📁 一个简单的http客户端
💻 CPP
字号:
/*
 ============================================================================
 Name		: HttpEngine.cpp
 Author	  : 
 Version	 : 1.0
 Copyright   : Your copyright notice
 Description : CHttpEngine implementation
 ============================================================================
 */

#include "HttpEngine.h"
#include <httpstringconstants.h>
#include <utf.h>
#include <http\mhttpdatasupplier.h>
#include "DisplayCallback.h"

CHttpEngine::CHttpEngine()
{
	// No implementation required
}

CHttpEngine::~CHttpEngine()
{
	iTrans.Cancel();
	iTrans.Close();
	iSession.Close();
	iConnection.Stop();
	iConnection.Close();
	iSocketServ.Close();
}

CHttpEngine* CHttpEngine::NewLC()
{
	CHttpEngine* self = new (ELeave)CHttpEngine();
	CleanupStack::PushL(self);
	self->ConstructL();
	return self;
}

CHttpEngine* CHttpEngine::NewL()
{
	CHttpEngine* self=CHttpEngine::NewLC();
	CleanupStack::Pop(); // self;
	return self;
}

void CHttpEngine::ConstructL()
{
	iSocketServ.Connect();
	iConnection.Open(iSocketServ);

	iSession.OpenL();
	iSession.SetSessionEventCallback(this);

	//set the sessions connection info
	RStringPool strPool = iSession.StringPool();
	RHTTPConnectionInfo connInfo = iSession.ConnectionInfo();

	//to use our socket server and connection
	connInfo.SetPropertyL(strPool.StringF(HTTP::EHttpSocketServ,
			RHTTPSession::GetTable()), THTTPHdrVal(iSocketServ.Handle()));

	connInfo.SetPropertyL(strPool.StringF(HTTP::EHttpSocketConnection,
			RHTTPSession::GetTable()), THTTPHdrVal(REINTERPRET_CAST(TInt, &(iConnection))) );

}

void CHttpEngine::MHFRunL(RHTTPTransaction aTransaction,
		const THTTPEvent& aEvent)
{
	switch (aEvent.iStatus)
	{
	case THTTPEvent::EGotResponseBodyData:
	{
		if (iObser)
		{
			MHTTPDataSupplier* source = aTransaction.Response().Body();
			TPtrC8 data8;
			source->GetNextDataPart(data8);
			HBufC* buf16=CnvUtfConverter::ConvertToUnicodeFromUtf8L(data8);
			CleanupStack::PushL(buf16);
			iObser->Display(*buf16);
			CleanupStack::PopAndDestroy(buf16);

			source->ReleaseData();
		}
	}
		break;
	default:
		break;
	}

}
TInt CHttpEngine::MHFRunError(TInt aError, RHTTPTransaction aTransaction,
		const THTTPEvent& aEvent)
{
	User::InfoPrint(_L("err"));
}

void CHttpEngine::MHFSessionRunL(const THTTPSessionEvent& aEvent)
{
}
TInt CHttpEngine::MHFSessionRunError(TInt aError,
		const THTTPSessionEvent& aEvent)

{
	User::InfoPrint(_L("session run err"));
}

void CHttpEngine::SetObser(MDisplayObser* aObser)
{
	iObser=aObser;
}

void CHttpEngine::ConnectL(const TDesC& aUrl)
{
	if (!iHaveStart)
	{
		iConnection.Start();
		iHaveStart=ETrue;
	}

	TUriParser8 uri8;
	HBufC8* url8=CnvUtfConverter::ConvertFromUnicodeToUtf8L(aUrl);
	CleanupStack::PushL(url8);
	uri8.Parse(*url8);
	RStringF method=iSession.StringPool().StringF(HTTP::EGET, iSession.GetTable());
	iTrans=iSession.OpenTransactionL(uri8, *this, method);

	iTrans.Request().SetURIL(uri8);
	iTrans.SubmitL();

	CleanupStack::PopAndDestroy(url8);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -