C++POST要求送信

2688 ワード

今日はMFC環境におけるネットワークインタラクションについてPOSTリクエストを送信する方法を見てきました.ネット上で他の人の資料を見て、ここで転載して記録して、下の関数のコードはCSDNフォーラムbiweilunの招待状から抜粋します.
捜索犬実験室の分析システムを借りてpostリクエストに応答したphpで対応する結果を返したいと思っていたが、ドメイン間アクセスの問題があり、仕方なく先に問題を置いて、他の宿題が終わってから見に来るしかなかった.
#include "afxinet.h"

/*   post  
         URL 
          post     
                   
              
*/
bool PostContent(CString strUrl, const CString &strPara, CString &strContent, CString &strDescript)
{                         
    try{
        strDescript = "      !";
        bool bRet = false;
        CString strServer, strObject, strHeader, strRet;
        unsigned short nPort;
        DWORD dwServiceType;
        if(!AfxParseURL(strUrl, dwServiceType, strServer, strObject, nPort))
        {
            strDescript = strUrl + "         !";
            return false;
        }
        CInternetSession sess;//Create session

        CHttpFile* pFile;

        CHttpConnection *pServer = sess.GetHttpConnection(strServer, nPort);
        
		if(pServer == NULL)
        {
            strDescript = "   ,       !";
            return false;
        }
        pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_POST,strObject,NULL,1,NULL,NULL,INTERNET_FLAG_EXISTING_CONNECT);
        if(pFile == NULL)
        {
            strDescript = "       " + strUrl;
            return false;
        }

		CString strHeaders = _T("Content-Type:application/x-www-form-urlencoded;Access-Control-Allow-Origin:http://www.sogou.com");
        pFile -> SendRequest(strHeaders, (LPTSTR)(LPCTSTR)strPara, strPara.GetLength());

        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)
        {
            char buffer[256];
            memset(buffer, 0, 256);
            int nReadCount = 0;
            while((nReadCount = pFile->Read(buffer, 2048)) > 0)
            {
                strContent += buffer;
                memset(buffer, 0, 256);
            }
            bRet = true;
        }
        else
        {
            strDescript = "       " + strUrl;
            bRet = false;
        }
        ////////////////////////////////////////
        pFile->Close();
        sess.Close();
        return bRet;
    }
    catch(...)
    {
        int nCode = GetLastError();
        strDescript.Format("    post  !   :%d", nCode);
        return false;
    }
}