MFC:AfxParseURL
BOOL AFXAPI AfxParseURL(
LPCTSTR pstrURL,
DWORD& dwServiceType,
CString& strServer,
CString& strObject,
INTERNET_PORT& nPort
);
返回值:
如果成功地解析了URL,则返回非零值。如果URL为空或它不包含已知的Internet服务类型,则为0。
参数:
pstrURL | 指向包含了要解析的URL的字符串的指针。 | ||||||||||||||||||||||||||||||
dwServiceType | 指明了Internet服务的类型。可能的取值如下:
|
||||||||||||||||||||||||||||||
strServerURL | 中服务类型后的第一个部分。 | ||||||||||||||||||||||||||||||
strObjectURL | 涉及的对象(可能为空)。 | ||||||||||||||||||||||||||||||
nPort | 如果存在,则从URL的服务器或对象部分搜索出来。 |
说明:
这个全局函数被用于CInternetSession::OpenURL。它解析一个URL字符串,返回服务的类型以及其它的内容。
例如,AfxParseURL解析一个如下形式的URL:
service://server/dir/dir/object.ext:port,返回的内容如下:
strServer == “server”
strObject == “/dir/dir/object/object.ext”
nPort == #port
dwServiceType == #service
注意:为了调用这个函数,你必须在项目中包含AFXINET.H。
用例:
BOOL PostSubmit(CString strUrl,const CString&strPara, CString&strContent) { BOOL bRet=FALSE; CString strInfo; try { CString strServer, strObject, strHeader, strRet; unsigned short nPort; DWORD dwServiceType; strInfo.Format("strUrl is %s\n",strUrl); printf("strUrl is %s\n",strUrl); strInfo.Format("strPara is %s\n",strPara); printf("strPara is %s\n",strPara); if(!AfxParseURL(strUrl, dwServiceType, strServer, strObject, nPort))//不是有效有网络地址! { g_DebugMsg.Sprintf("不是有效有网络地址!\n"); return FALSE; } strInfo.Format("dwServiceType:%d\n",dwServiceType); printf("dwServiceType:%d\n",dwServiceType); strInfo.Format("strServer:%s\n",strServer); printf("strServer:%s\n",strServer); strInfo.Format("strObject:%s\n",strObject); printf("strObject:%s\n",strObject); strInfo.Format("nPort:%d\n",nPort); printf("nPort:%d\n",nPort); CInternetSession sess(_T("faxsms")); CHttpFile* pFile= NULL; CHttpConnection *pServer= sess.GetHttpConnection(strServer, nPort); if(pServer== NULL)//连接服务器失败! { strInfo.Format("%s\n","连接服务器失败!"); g_DebugMsg.Sprintf("连接服务器失败!\n"); return FALSE; } pFile= pServer->OpenRequest(CHttpConnection::HTTP_VERB_POST,strObject,NULL,1,NULL,NULL,INTERNET_FLAG_EXISTING_CONNECT); if(pFile== NULL)//找不到网络地址 { g_DebugMsg.Sprintf("找不到网络地址!\n"); sess.Close(); return FALSE; } pFile-> AddRequestHeaders("Content-Type: application/x-www-form-urlencoded"); // pFile-> AddRequestHeaders("Content-Type: HappiGo/Process"); // pFile-> AddRequestHeaders("Accept: */*"); if (!pFile->SendRequest(NULL,0,(LPTSTR)(LPCTSTR)strPara, strPara.GetLength())) { g_DebugMsg.Sprintf("SendRequest error!\n"); pFile->Close(); sess.Close(); return FALSE; } CString strSentence; DWORD dwStatus; DWORD dwBuffLen=sizeof(dwStatus); BOOL bSuccess= pFile->QueryInfo(HTTP_QUERY_STATUS_CODE|HTTP_QUERY_FLAG_NUMBER,&dwStatus,&dwBuffLen); //if( bSuccess&& dwStatus>=200&& dwStatus<300) if( bSuccess&& dwStatus==200) { strInfo.Format("dwStatus:%d\n",dwStatus); printf("dwStatus:%d\n",dwStatus); char buffer[2049]; memset(buffer,0,2049); int nReadCount=0; while((nReadCount= pFile->Read(buffer,2048))>0) { strContent+= buffer; memset(buffer,0,2049); } //strInfo.Format("strContent:%s\n",strContent); //g_DebugMsg.Sprintf("return Content :%s\n",strContent); bRet=TRUE; } else//错误 { if (bSuccess&& dwStatus>200 && dwStatus<300) { char buffer[2049]; memset(buffer,0,2049); int nReadCount=0; while((nReadCount= pFile->Read(buffer,2048))>0) { strContent+= buffer; memset(buffer,0,2049); } strInfo.Format("strContent:%s\n",strContent); g_DebugMsg.Sprintf("return Content :%s\n",strContent); } bRet=FALSE; } pFile->Close(); sess.Close(); } catch (CInternetException *e) { g_DebugMsg.Sprintf("ERROR001 :error code is %ld\n",e->m_dwError); bRet=FALSE; } catch (...) { g_DebugMsg.Sprintf("Unknown Error\n"); bRet=FALSE; } return bRet; }