/**
* Tencent is pleased to support the open source community by making Tars available.
*
* Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved.
*
* Licensed under the BSD 3-Clause License (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* https://opensource.org/licenses/BSD-3-Clause
*
* Unless required by applicable law or agreed to in writing, software distributed
* under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
* CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
#include "util/tc_cgi.h"
#include "util/tc_common.h"
using namespace tars;
void testStdin()
{
string sFileName = "/data/tars/test/util/" + TC_Common::now2str() + ".tmp";
TC_Cgi cgi;
cout << TC_Cgi::htmlHeader("text/html");
cgi.setUpload(sFileName, 2, 1024*1024*10);
cgi.parseCgi();
cout << cgi.setCookie(cgi.getValue("cookie1"), cgi.getValue("cookie2"), TC_Common::now2str());
cout << "value:" << cgi.getValue("value") << endl;
string s = "abc 中文";
cout << TC_Cgi::encodeURL(s) << "
";
cout << TC_Cgi::decodeURL(s) << "
";;
cout << TC_Cgi::encodeHTML(cgi.getValue("D1"), true) ;
cout << TC_Common::tostr(cgi.getParamMap()) << "
";
cout << "
";
cout << TC_Common::tostr(cgi.getEnvMap()) << "
";
}
void parseNormal(multimap &mmpParams, const string& sBuffer)
{
int iFlag = 0;
string sName;
string sValue;
string sTmp;
string::size_type len = sBuffer.length();
string::size_type pos = 0;
while (pos < len)
{
sTmp = "";
if(iFlag == 0)
{
while ( (sBuffer[pos] != '=') && (pos < len) )
{
sTmp += (sBuffer[pos] == '+') ? ' ' : sBuffer[pos];
++pos;
}
}
else
{
while ( (sBuffer[pos] != '&') && (pos < len) )
{
sTmp += (sBuffer[pos] == '+') ? ' ' : sBuffer[pos];
++pos;
}
}
if (iFlag == 0) //param name
{
sName = TC_Cgi::decodeURL(sTmp);
if ( (sBuffer[pos] != '=') || (pos == len - 1) )
{
sValue = "";
mmpParams.insert(multimap::value_type(sName, sValue));
}
else
{
iFlag = 1;
}
}
else
{
sValue = TC_Cgi::decodeURL(sTmp);
mmpParams.insert(multimap::value_type(sName, sValue));
iFlag = 0;
}
++pos;
}
}
void testCgiParam(const string &buffer)
{
multimap m;
parseNormal(m, buffer);
cout << TC_Common::tostr(m) << endl;
}
int main(int argc, char *argv[])
{
try
{
// testStdin();
// testCgiParam("a=b&c=d&e=f=");
// testCgiParam("abc&=b&c=d&e=f=");
// testCgiParam("a++&=b&c=d&e=f=");
// testCgiParam("=b&c=d===&e=f=");
// testCgiParam("=b&c=d++=&e=f=");
testCgiParam("db=sina&bid=161423,230233,235253&cid=0,0,0&sid=224587&advid=1293&camid=25420&show=ignore&url=http://bbs.fangyou.com/viewthread.php?tid=1021196&pi=sina-langshou-wzl1");
}
catch(exception &ex)
{
cout << ex.what() << endl;
}
return 0;
}