Cocos 2 dxエンジンノート-HttpClientの使い方


HttpClientはHTTPクライアントのインタフェースです.HttpClientは各種オブジェクトをカプセル化し,cookies,アイデンティティ認証,接続管理などを処理する.
コンセプト
HttpClientの使用には、一般的に次の6つのステップがあります.
HttpRequestのインスタンスを作成します.
ある接続方法のタイプ(GET、POSTなど)を設定し、ここでseturlを通じて接続するアドレスを入力する.
応答コールバック関数を設定し、responseを読み出す.
HttpClientタスクキューにリクエストを追加します.
接続を解除します.実行方法が成功するかどうかにかかわらず、接続を解放する必要があります.
得られた内容を処理する.
一、どのように使うか
1、ヘッダファイルとネーミングスペースを導入する
#include "network/HttpClient.h"
using namespace cocos2d::network;

2、HttpRequestインスタンス
HttpRequest無パラメータのコンストラクション関数を使用します.これはほとんどの場合に良いデフォルト設定を提供するので、使用します.
HttpRequest* request = new HttpRequest();

3、接続方法の種類と接続するアドレスを設定する
Getメソッドを使用してURLを取得し、URLが指すドキュメントを取得します.
request->setRequestType(HttpRequest::Type::GET);
request->setUrl("http://www.httpbin.org/get");

4、コールバックの設定
サーバがどのような状態を返しても、応答主体response bodyは常に読み取り可能であることが重要です.
request->setResponseCallback(CC_CALLBACK_2(HelloWorld::onHttpComplete,this));

応答データをonHttpCompleteで読み込みます.
std::vector<char> *buffer = response->getResponseData();//Get the request data pointer back

5.HttpClientタスクキューへのリクエストの追加
cocos2d::network::HttpClient::getInstance()->send(request);

6、接続解除
これはプロセス全体を完全にするための重要なステップであり、HttpClientに接続が完了し、再利用できることを伝えなければなりません.そうしないと、HttpClientは再利用できるように接続の解放を無期限に待つことになります.
request->release();

7、処理応答
HttpClientとのインタラクションが完了し、私たちが処理しなければならないデータに集中することができます.この例では、コンソールに出力するだけです.
// dump data
std::vector *buffer = response->getResponseData();
printf("Http Test, dump data: ");
for (unsigned int i = 0; i < buffer->size(); i++)
{
    printf("%c", (*buffer)[i]);
}
printf("
");

responseをストリームとしてその中の情報を読み取る必要がある場合は、上記の手順でこの接続をどのように解析するかと組み合わせて、すべてのデータを処理した後、入力ストリームを閉じて接続を解放します.
8、GET要求例
以下に、HttpClientによるHTTP GETリクエストの例を示す.
    HttpRequest* request = new HttpRequest();
    request->setUrl("http://www.baidu.com");
    request->setRequestType(HttpRequest::Type::GET);
    request->setResponseCallback(CC_CALLBACK_2(HelloWorld::onHttpRequestCompleted,this));
    request->setTag("GET test");
    cocos2d::network::HttpClient::getInstance()->send(request);
    request->release();

9.POST要求例
POSTリクエストをURLに送信します」http://httpbin.org/post”.
    HttpRequest* request = new HttpRequest();
    request->setUrl("http://httpbin.org/post");
    request->setRequestType(HttpRequest::Type::POST);
    request->setResponseCallback(CC_CALLBACK_2(HelloWorld::onHttpRequestCompleted,this));

    // write the post data
    const char* postData = "visitor=cocos2d&TestSuite=Extensions Test/NetworkTest";
    request->setRequestData(postData, strlen(postData));
    request->setTag("POST test");
    cocos2d::network::HttpClient::getInstance()->send(request);
    request->release();

10、ネットワークコールバック関数の処理
void HelloWorld::onHttpRequestCompleted(HttpClient *sender, HttpResponse *response)
{
    if (!response)
    {
        return;
    }    

    // You can get original request type from: response->request->reqType
    if (0 != strlen(response->getHttpRequest()->getTag()))
    {
        log("%s completed", response->getHttpRequest()->getTag());
    }    
    int statusCode = response->getResponseCode();
    char statusString[64] = {};
    sprintf(statusString, "HTTP Status Code: %d, tag = %s", statusCode, response->getHttpRequest()->getTag());
    _labelStatusCode->setString(statusString);
    log("response code: %d", statusCode);    
    if (!response->isSucceed())
    {
        log("response failed");
        log("error buffer: %s", response->getErrorBuffer());
        return;
    }
    // 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("
"); }

11、Android
Android環境の場合は、アプリケーションのManifestに適切な権限を追加する必要があります.
<uses-permission android:name=”android.permission.INTERNET” />

詳細コードは.testsCppTestCppClassesExtensionsTestNetworkTestHttpClientTest.cppを参照
  :    http://www.cocos.com/         。