C++
Rails
HTTP
cocos2d-x
Basic認証

Cocos2d-xのhttp通信で基本認証を通る方法

初めに

Cocos2d-xのHttpRequestで基本認証を通る情報が見当たらず、
少し苦戦したためメモ程度に残しておきたいと思い書きました。

今回Base64エンコードをするために、こちらからコードをお借りしました。
コード内で記述されている

macaron::Base64::Encode(s);

は、お借りしたコードに書かれている関数です。

環境

Cocos2d-x 3.17
Ruby 2.5
Rails 5.2.1

解説

まずRails側でコントローラーに以下を記述し、基本認証をかけました。

hoge_controller.rb
http_basic_authenticate_with name: 'user_name', password: 'user_password' if Rails.env.development? || Rails.env.production?

 
 
基本認証のヘッダーの作成はこんな感じです。
初めにで書いたBase64.hをインクルードするのを忘れないでください。

MyScene.cpp
    std::string s = "user_name:user_password";
    std::string base64 = macaron::Base64::Encode(s);

    std::vector<std::string> headers;
    std::string userPass = "Authorization: Basic " + base64;
    headers.push_back(userPass);

 
作成したヘッダーをHttpRequestにセットして送信すれば基本認証を通ることができます。

MyScene.cpp
    auto request = new network::HttpRequest();
    request->setUrl("URL");
    request->setRequestType(network::HttpRequest::Type::GET);
    //↓ヘッダーをセット
    request->setHeaders(headers);
    request->setResponseCallback(CC_CALLBACK_2(MyScene::callbackHttpRequest, this));

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