BOOL AFXAPI AfxParseURL(
     LPCTSTR pstrURL,
     DWORD& dwServiceType,
     CString& strServer,
     CString& strObject,
     INTERNET_PORT& nPort
    );

返回值:
如果成功地解析了URL,则返回非零值。如果URL为空或它不包含已知的Internet服务类型,则为0。

参数:

pstrURL 指向包含了要解析的URL的字符串的指针。
dwServiceType 指明了Internet服务的类型。可能的取值如下:

· AFX_INET_SERVICE_FTP
· AFX_INET_SERVICE_HTTP
· AFX_INET_SERVICE_HTTPS
· AFX_INET_SERVICE_GOPHER
· AFX_INET_SERVICE_FILE
· AFX_INET_SERVICE_MAILTO
· AFX_INET_SERVICE_NEWS
· AFX_INET_SERVICE_NNTP
· AFX_INET_SERVICE_TELNET
· AFX_INET_SERVICE_WAIS
· AFX_INET_SERVICE_MID
· AFX_INET_SERVICE_CID
· AFX_INET_SERVICE_PROSPERO
· AFX_INET_SERVICE_AFS
· AFX_INET_SERVICE_UNK
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;
}

 

版权声明:本文为CPYER原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/CPYER/archive/2013/08/15/3260203.html