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