MFC访问http协议


#include "afxwin.h"
#include "afxinet.h"
#include <string>
CString CTicketCheckSysDlg::HttpPostMessage( CString strUrl, CString strPostDate )
{
    CString strJsonMessage(_T("-1"));
    CString strServer;
    CString strObject;
    DWORD dwServiceType;
    INTERNET_PORT nPort;
    AfxParseURL(strUrl, dwServiceType, strServer, strObject, nPort);
    using namespace std;   
    CInternetSession session;
    try 
    {
        DWORD dwRet = 0;
        BOOL bRet = session.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT, 5000);
        bRet = session.SetOption(INTERNET_OPTION_SEND_TIMEOUT, 5000);
        bRet = session.SetOption(INTERNET_OPTION_CONTROL_SEND_TIMEOUT, 5000);
        bRet = session.SetOption(INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT, 5000);
        bRet = session.SetOption(INTERNET_OPTION_DATA_SEND_TIMEOUT, 5000);
        bRet = session.SetOption(INTERNET_OPTION_DATA_RECEIVE_TIMEOUT, 5000);
        bRet = session.SetOption(INTERNET_OPTION_LISTEN_TIMEOUT, 5000);
        bRet = session.SetOption(INTERNET_OPTION_FROM_CACHE_TIMEOUT, 5000);
        CHttpConnection* pServer = session.GetHttpConnection(strServer, nPort); 
        CHttpFile* pHttpFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_POST, strObject);   
        CString strHeaders = _T("Content-Type: application/json; charset=utf-8"); // 请求头
        //开始发送请求   
        std::string strTmpDate;
        char * lp = NULL;
        CCodingConv codingconvert;// 在上一篇文章中查看类定义
        int nretLen = codingconvert.ConvertStringToUTF8(strPostDate, lp);
        BOOL bSendRequest = pHttpFile->SendRequest(strHeaders,lp,nretLen); 
        delete []lp;
        lp = NULL;
        if (!bRet || !bSendRequest)
        {
            //发送请求失败
            return strJsonMessage;
        }
        pHttpFile->QueryInfoStatusCode(dwRet);
        if (dwRet == HTTP_STATUS_OK) // 请求数据成功 
        { 
            char szChars[BUFFER_SIZE + 1] = {0};
            string strRawResponse = "";
            UINT nReaded = 0;
            while ((nReaded = pHttpFile->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 strTemp(pUnicode);
            strJsonMessage = strTemp;
            delete []pUnicode; 
            pUnicode = NULL;
        } 
        else 
        { 
            return strJsonMessage; 
        } 
        delete pHttpFile;
        delete pServer;
    } 
    catch (CInternetException* pEx) 
    { 
        //catch errors from WinInet 
        TCHAR pszError[200]; 
        pEx->GetErrorMessage(pszError, 200);
        return strJsonMessage;
    }
    BOOL bRet = session.SetOption(INTERNET_OPTION_DISCONNECTED_TIMEOUT, 5000);
    session.Close();
    return strJsonMessage;
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值