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