一、提交参数为json格式,返回数据也为json格式
TStringStream * ms;
char * lpBuf;
TStringList * pParam;
try
{
//http路径
AnsiString g_Url= m_httpPath+"Basic/SJG/CheckLogin";
//接收返回值
ms = new TStringStream("");
//参数,json格式
pParam = new TStringList();
pParam->Add("{\"LoginName\":20120701,");
pParam->Add("\"LoginPsw\":\"x12jTF5\",");
pParam->Add("\"GEID\":20120701}");
idhtpXR->Request->ContentType = "application/json";
idhtpXR->Request->AcceptEncoding = "gzip,deflate,br";
idhtpXR->Post(g_Url,pParam,ms); //Post提交
mmoInfo->Text = ms->DataString;//返回为json格式
}
__finally
{
delete ms;
delete pParam;
}
二、参数中带Token的post提交如下:
bool TXingRuan::HeartBeat()
{
TStringStream * ms = new TStringStream("");
TStringStream * pParam = new TStringStream("1");
AnsiString strUrl= m_strPublicPath+"Basic/SJG/HeartBeat";
try
{
m_pIdHttp->Request->ExtraHeaders->Values["Token"]=Token;//添加Token
m_pIdHttp->Request->ContentLength = pParam->DataString.Length();//不能为0
m_pIdHttp->Post(strUrl,pParam,ms);
neb::CJsonObject oJson ( ms->DataString.c_str() );
std::string info = oJson("info");
m_strInfo = m_Http.UTF8_To_string(info).c_str();
delete ms;
delete pParam;
return true;
}
catch(...)
{
delete ms;
delete pParam;
return false;
}
}
如果参数中包含中文,在用json传输参数时,需要先使用URLEncode编码,否则出现:"400 bad request" 错误提示
pParam->WriteString(URLEncode("\"BsName\":\""+BsName+"\","));//GB2312编码
如果是utf-8编码方式,需要将输入的json字符串,转成unicode码。