用MFC編寫訪問HTTPS程序之忽略無效證書驗證

最近需要寫一個與HTTPS通訊的APP,但是由於本人是第一次編寫這樣的網絡程序,所以忽略無效證書驗證這個問題一直困擾了1-2天,由於在網上的資料基本上都是說同樣的問題,但是忽略了一點沒有說明的,就是要Query服務器的狀態,經過本人不斷的查資料,結果終於找到了答案,下面是一些整理好了的代碼,以供日後可以查看。

IDE: VC++6.0

bool WebProcess::Connect(CString strURL)
{
	DWORD dwFlags;
	DWORD dwStatus = 0;
	DWORD dwStatusLen = sizeof(dwStatus);
	CString strLine;

	AfxParseURL(strURL, m_dwServiceType, m_strServer, m_strObject_URI, m_nServerPort);

	try {
		m_pHttpConn = m_pSess->GetHttpConnection(m_strServer, INTERNET_FLAG_SECURE, m_nServerPort,
			NULL, NULL);
		if(m_pHttpConn) {
			m_pHttpFile = (CHttpFile*)m_pHttpConn->OpenRequest(CHttpConnection::HTTP_VERB_POST, m_strObject_URI, NULL, 1,
				NULL, m_strHttpVersion,
				INTERNET_FLAG_SECURE |
				INTERNET_FLAG_EXISTING_CONNECT |
				INTERNET_FLAG_RELOAD |
				INTERNET_FLAG_NO_CACHE_WRITE |
				INTERNET_FLAG_IGNORE_CERT_DATE_INVALID |
				INTERNET_FLAG_IGNORE_CERT_CN_INVALID
			);
			//get web server option
			m_pHttpFile->QueryOption(INTERNET_OPTION_SECURITY_FLAGS, dwFlags);
			dwFlags |= SECURITY_FLAG_IGNORE_UNKNOWN_CA;
			//set web server option
			m_pHttpFile->SetOption(INTERNET_OPTION_SECURITY_FLAGS, dwFlags);
			if(m_pHttpFile->SendRequest()) {
				//get response status if success, return 200
				m_pHttpFile->QueryInfo(HTTP_QUERY_FLAG_NUMBER | HTTP_QUERY_STATUS_CODE,
					&dwStatus, &dwStatusLen, 0);
				while(m_pHttpFile->ReadString(strLine)) {
					//m_strHtml += Convert(strLine, CP_ACP);
					m_strHtml += strLine + char(13) + char(10);
				}
			} else {
				AfxMessageBox(_T("SendRequest fail!"));
			}
		} else {
			AfxMessageBox(_T("Connect fail!"));
		}
	} catch(CInternetException *e) {
		e->ReportError();
	}

	if(dwStatus >= 200 && dwStatus < 300) {
		return true;
	} else {
		return false;
	}
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章