MFC:AfxParseURL

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;
}

 

转载于:https://www.cnblogs.com/CPYER/p/3260203.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值