【开源】Https数据读取C++实现

一、测试平台

        VC6.0 + Window xp

二、基本实现          

//HttpsData.h
#include 
class CHttpsData  
{
public:
	CHttpsData();
	virtual ~CHttpsData();
public:
	BOOL GetData(CString *webData);
	CString Url;
	CString strServerName;
	CString strTarget;
	DWORD dwSeviceType;
	INTERNET_PORT nPort;

};

       实现文件:

CHttpsData::CHttpsData()
{
	Url = "https://www.tenpay.com/v2/";
	nPort = INTERNET_DEFAULT_HTTPS_PORT;
}
CHttpsData::~CHttpsData()
{
}
BOOL CHttpsData::GetData(CString *webData)
{
	CString strHeaders = _T("Content-Type: application/x-www-form-urlencoded");
	AfxParseURL(Url,dwSeviceType,strServerName,strTarget,nPort);
	CInternetSession sess;
	sess.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT,1000*20);
	sess.EnableStatusCallback(TRUE);
	CHttpConnection* pHttpConnect = sess.GetHttpConnection(strServerName,nPort);
	CHttpFile* pHttpFile = pHttpConnect->OpenRequest(CHttpConnection::HTTP_VERB_GET,
		strTarget,NULL,1,NULL,NULL,INTERNET_FLAG_SECURE);
	try
	{
		BOOL bResult =pHttpFile->SendRequest(strHeaders);
	}
	catch (CInternetException* pException)
	{
		pException->m_dwError;
		pException->Delete();
	}
	pHttpFile->SetReadBufferSize(2048);
	CString str;
	CString strGetData;
	while(pHttpFile->ReadString(strGetData))
	{
		str +="\r\n";
		str +=strGetData;
	}
	CFile file("https.data",CFile::modeCreate | CFile::modeWrite);
	file.Write(str,str.GetLength());
	file.Close();
	pHttpFile->Close();
	delete pHttpFile;
	pHttpConnect->Close();
	delete pHttpConnect;
	sess.Close();
	return TRUE;
}

 调用格式

	CHttpsData Data;
	CString strData;
	Data.GetData(&strData);

三、错误处理

       错误示例:断言宏,Assert()函数发出,inet.cpp第627行可找到

                    【开源】Https数据读取C++实现_第1张图片

       错误分析:

            1、一个类对象中,包含多个指针对象,在句柄函数,但是该类的析构函数并没有对指针对象释放,即不存在关联关系。

            2、MFC类库思想:类和类之间,很少会用到组合关系,类和类之间的耦合通过接口函数,在局部中new一个指针。其他的释放,传参等,都交给用户。

四、Win8 & V.S 2008以上的问题

        字符集的问题,写数据到文件以及内存数据数据,均需注意。

参考:1、HTTPS vs WinInet_Kruglinski's Blog

2、INTERNET_DEFAULT_HTTPS_PORT INTERNET_FLAG_SECURE

3、misc.cpp-libfetion-gui-wince

你可能感兴趣的:(项目)