MFC 通过 get/post 访问 Web Service

1..h文件,引入头文件及宏定义,申明变量及函数

#include <string>
using namespace std;
#include <afxinet.h>
// 操作成功
#define SUCCESS        0
// 操作失败
#define FAILURE        1
// 操作超时
#define OUTTIME        2
// 无对象
#define NOOBJECT        3
//错误代码
#define NOCODE        4
//buffer
#define  BUFFER_SIZE       1024

CHttpConnection* m_pConnectionHttpRY;
    CHttpFile* m_pFileRY;
    CInternetSession sessRY;//Create session 
    int UploadRequest(LPCTSTR strPostData, CString &strResponse);
    int ExecuteRequest(LPCTSTR strPostData, CString &strResponse);
    void Clear(CHttpFile* m_pFileRY,CHttpConnection* m_pConnectionHttpRY);

2.cpp文件,函数的实现及变量释放

void XXXDlg::Clear(CHttpFile* m_pFileRY,CHttpConnection* m_pConnectionHttpRY)
{
    if(NULL != m_pFileRY)
    {
        m_pFileRY->Close();
        delete m_pFileRY;
        m_pFileRY = NULL;
    }

    if(NULL != m_pConnectionHttpRY)
    {
        m_pConnectionHttpRY->Close();
        delete m_pConnectionHttpRY;
        m_pConnectionHttpRY = NULL;
    }
}

int XXXDlg::UploadRequest(LPCTSTR strPostData, CString &strResponse)
{
    LPCTSTR strUrl;
    CString strServer,strObject,strRuntext;;
    DWORD dwServiceType;
    INTERNET_PORT nPort;
    strResponse = "";
    strUrl = "http://apigw.huawei.com/api/mespmmwipems/services/getRecipeAndTrackInV1";

    //字符串指针,指向要解析的URL。指示互联网服务的类型。接收待解析的URL服务器名,服务类型后的第一个部分。接收待解析的URL 涉及的对象(可能为空)。 如果存在,则从URL的服务器或对象部分搜索出来。
    AfxParseURL(strUrl, dwServiceType, strServer, strObject, nPort);  //解析url
    //判断协议类型是否为http或https
    if(AFX_INET_SERVICE_HTTP != dwServiceType && AFX_INET_SERVICE_HTTPS != dwServiceType)
    {
        return FAILURE;
    }
    try
    {
        sessRY.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT, 5000);
        //获取 创建一个internet连接的对象!!!!!
        m_pConnectionHttpRY = sessRY.GetHttpConnection(strServer ,nPort);  
        //获取 CHttpFile*
        m_pFileRY = m_pConnectionHttpRY->OpenRequest(CHttpConnection::HTTP_VERB_POST, strObject,NULL, 1, NULL, NULL,INTERNET_FLAG_EXISTING_CONNECT); 

        m_pFileRY->AddRequestHeaders("Accept:application/json");
        m_pFileRY->AddRequestHeaders("X-HW-ID:huawei.supply.mes");
        m_pFileRY->AddRequestHeaders("X-HW-APPKEY:rsjp5ZSw2iiAaLnTinbdvg==");
        m_pFileRY->SendRequest(NULL, 0, (LPVOID)(LPCTSTR)strPostData, strPostData == NULL ? 0 : _tcslen(strPostData));

        char szChars[BUFFER_SIZE + 1] = {0};
        string strRawResponse = "";
        UINT nReaded = 0;
        while ((nReaded = m_pFileRY->Read((void*)szChars, BUFFER_SIZE)) > 0)
        {
            szChars[nReaded] = '\0';
            strRawResponse += szChars;
            memset(szChars, 0, BUFFER_SIZE + 1);
        }
        int unicodeLen = MultiByteToWideChar(CP_UTF8, 0, strRawResponse.c_str(), -1, NULL, 0);
        WCHAR *pUnicode = new WCHAR[unicodeLen + 1];
        memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t));

        MultiByteToWideChar(CP_UTF8,0,strRawResponse.c_str(),-1, pUnicode,unicodeLen);
        CString cs(pUnicode);
        delete []pUnicode; 
        pUnicode = NULL;
        strResponse = cs;
        SetSysTipsInfo(strResponse,RGB(0,255,0));
        SaveReportTxt(strResponse);
        Clear(m_pFileRY,m_pConnectionHttpRY);
    }
    catch (CInternetException* e)
    {
        Clear(m_pFileRY,m_pConnectionHttpRY);
        DWORD dwErrorCode = e->m_dwError;    
        strRuntext.Format(_T("%d"),dwErrorCode);
        SetSysTipsInfo(strRuntext,RGB(255,0,0));
        SaveReportTxt(strRuntext);
        e->Delete();

        DWORD dwError = GetLastError();

        if (ERROR_INTERNET_TIMEOUT == dwErrorCode)
        {
            return OUTTIME;
        }
        else
        {
            return FAILURE;
        }
    }
    return SUCCESS;
}

3.函数的调用

 CString strPostData = "{\"sn\":\"" + m_strQR + "\",\"position\":\"" + strposition + "\",\"traySn\":\"" + strtraySn + "\",\"stationNo\":\"" + strstationNo + "\",\"machineSn\":\"" + strmachineSn + "\",\"siteId\":\"" + strsiteId + "\"}";

              int nResult;
               CString  strResponse = "";
                nResult = UploadRequest(strPostData,strResponse);
                if (nResult == 0)
               {

                   strRunText.Format(_T("执行web成功"));
                    SetSysTipsInfo(strRunText,RGB(0,255,0));
                    SaveReportTxt(strRunText);

                } 

                else

                {

                   strRunText.Format(_T("执行web失败"));
                    SetSysTipsInfo(strRunText,RGB(255,0,0));
                    SaveReportTxt(strRunText);

                   }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值