最近需要寫一個與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;
}
}