picojsonを使用してHTTP(POST)通信する

  • 12
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

picojsonを使用して、JSONフォーマットのデータをPOSTでサーバーに送信します。

POST送信
auto request = new cocos2d::network::HttpRequest();
request->setUrl("http://xxxx/login.php");
request->setRequestType(cocos2d::network::HttpRequest::Type::POST);
request->setResponseCallback(CC_CALLBACK_2(LoginScene::callbackHttpRequest, this));
request->setTag("Login");

picojson::object obj;
obj.insert(make_pair("account_name", picojson::value(m_pEditBoxAccountName->getText())));
obj.insert(make_pair("password", picojson::value(m_pEditBoxPassword->getText())));

picojson::value val(obj);
std::string json = val.serialize();
request->setRequestData(json.c_str(), json.length());

auto httpClient = cocos2d::network::HttpClient::getInstance();
httpClient->enableCookies(nullptr);
httpClient->send(request);

サーバーでは、POSTされた生データをJSONフォーマットにデコードします。

サーバ側PHP
<?php
$postData = file_get_contents("php://input");
$inputData = json_decode(stripcslashes($postData));

// テスト(送信データをそのまま返す).
header('Content-type:application/json');
echo json_encode($inputData);

picojsonでサーバーからのJSONデータを取得します。

受信
void LoginScene::callbackHttpRequest(cocos2d::network::HttpClient *sender, cocos2d::network::HttpResponse *response)
{
    if (response->isSucceed()) {
        // dump data.
//      std::vector<char> *buffer = response->getResponseData();
//      printf("Http Test, dump data: ");
//      for (unsigned int i = 0; i < buffer->size(); i++)
//      {
//          printf("%c", (*buffer)[i]);
//      }
//      printf("\n");

        // json.
        std::vector<char> *buffer = response->getResponseData();
        const char *data = reinterpret_cast<char *>(&(buffer->front()));
        picojson::value v;
        std::string error;
        picojson::parse(v, data, data + strlen(data), &error);
        CCASSERT(error.empty(), error.c_str());

        picojson::object &obj = v.get<picojson::object>();
        std::string &name = obj["account_name"].get<std::string>();
        std::string &password = obj["password"].get<std::string>();
        CCLOG("name:%s password:%s", name.c_str(), password.c_str());
    }
    else {
        CCLOG("HttpRequest failed");
    }
}

このようにすれば、サーバーとの通信でいろいろできるようになります。

以上