1)创建CHttpConnection和CHttpFile之前对Url进行解析,判断服务类型
AfxParseURL(strServerPath, dwServiceType, strServerName, strObjectName, nPort);除了第一个参数,其它均为出口参数,dwServiceType可获得服务类型。
DWORD dwFlags = INTERNET_FLAG_DONT_CACHE; if (AFX_INET_SERVICE_HTTPS == dwServiceType) { dwFlags = 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; } CInternetSession mySession; CHttpConnection *pHttpConnection = mySession.GetHttpConnection(strServerName, nPort); CHttpFile *pHttpFile = pHttpConnection->OpenRequest(CHttpConnection::HTTP_VERB_PUT, strObjectName, NULL, 1, NULL, NULL, dwFlags);
获取服务如果服务类型为AFX_INET_SERVICE_HTTPS,则需先获取服务器选项,然后设置标记并设置Web服务器选项。
if (AFX_INET_SERVICE_HTTPS == dwServiceType) { // ignore the certificate pHttpFile->QueryOption(INTERNET_OPTION_SECURITY_FLAGS, dwFlags); dwFlags |= (SECURITY_FLAG_IGNORE_CERT_CN_INVALID | SECURITY_FLAG_IGNORE_CERT_DATE_INVALID | SECURITY_FLAG_IGNORE_UNKNOWN_CA | SECURITY_FLAG_IGNORE_WRONG_USAGE | SECURITY_FLAG_IGNORE_REVOCATION); // set web server option pHttpFile->SetOption(INTERNET_OPTION_SECURITY_FLAGS, dwFlags); if (UseHttpsSendReqEx(pHttpFile, dwPostSize, strLocalFile)) { // 该函数向Https服务器发送本地文件strLocalFile,使用CHTTPFile::SendRequestEx()函数 } }