HandleLottery函数用来处理网页返回数据
void MyLottery::RequestLottery()
{
HttpRequest* pHttpReq = new (std::nothrow) HttpRequest(); //一个请求数据封装类,用于HttpClient::send
pHttpReq->setRequestType(HttpRequest::Type::POST); //在发送HttpRequest对象前,设置HttpRequest的类型值,它可以是HttpRequest::Type的枚举类型中的任意一个值。
std::string url = "";
std::string requestData = StringUtils::format("Uid=1005424&Key=%s&LotteryId=2017061401",key);
pHttpReq->setUrl(url.c_str()); //设置HttpRequest对象的url。 url的值如下:“http://httpbin.org/ip”或“https://httpbin.org/get”
pHttpReq->setRequestData(requestData.c_str(), requestData.size()); //设置HttpRequest对象的请求数据。
pHttpReq->setTag("requestLottery"); //设置字符串标签用于识别request。 这个字符串标签可以通过HttpResponse->getHttpRequest->getTag()获得。
pHttpReq->setResponseCallback(CC_CALLBACK_2(MyLottery::HandleLottery, this));//设置target和相关的回调函函数。 当响应返回时,它将调用(pTarget->*pSelector)来处理一些事情。
HttpClient::getInstance()->setTimeoutForConnect(6); //以秒为单位设置连接超时时间。
HttpClient::getInstance()->send(pHttpReq); //添加一个request到任务队列中
pHttpReq->release();
}
void MyLottery::HandleLottery(HttpClient* client, HttpResponse* response)
{
std::string strMsg;
if (!response->isSucceed())
{
return;
}
else
{
std::vector<char> *buffer = response->getResponseData();//获取http响应数据。
std::string strData(buffer->begin(), buffer->end());
rapidjson::Document doc;
doc.Parse<0>(strData.c_str());
if (doc.HasParseError())
return;
if (doc.HasMember("DrawTimes"))
m_lotteryResult.drawTime = doc["DrawTimes"].GetInt();
if (doc.HasMember("HitMsg"))
m_lotteryResult.hitMsg = doc["HitMsg"].GetString();
if (doc.HasMember("HitTimes"))
m_lotteryResult.hitTime = doc["HitTimes"].GetInt();
if (doc.HasMember("IsSuccess"))
m_lotteryResult.isSuccess = doc["IsSuccess"].GetBool();
if (doc.HasMember("ItemId"))
m_lotteryResult.itemId = doc["ItemId"].GetInt();
if (doc.HasMember("Opportunities"))
m_lotteryResult.opportunities = doc["Opportunities"].GetInt();
if (doc.HasMember("UserId"))
m_lotteryResult.userId = doc["UserId"].GetInt();
}
m_opportunityTime->setString(std::to_string(m_lotteryResult.opportunities));
}
key用抓包软件获取