转自:http://blog.csdn.net/lwwworkspace/article/details/6697194
最近需要写一个与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;
- }
- }