天天看點

【Cocos2d-x】Cocos2d-X網絡程式設計-HttpRequest/HttpClient/HttpResponse

Cocos2d-x封裝了3個類來處理HTTP請求:

HttpRequest,HttpClient和HttpResponse.

使用HttpRequest,HttpClient和HttpResponse這3個類進行Http進行請求時,需要遵循一定流程

請求過程:

1.建立HttpRequest的執行個體。

2.設定請求方式,Get、Post等。(千萬不要以為隻有get和post方式哦,這是一般新手以為的,隻是其他請求方式我們平時用到的很少)

3.設定請求位址和發送的資料(如果沒有發送的資料,可不設定發送資料)。

4.設定響應回調函數,在回調函數中處理擷取的資料。

5.建立HttpClient執行個體,發送請求。

6.釋放請求連接配接。

使用Cocos2d封裝的HttpRequest設定請求資訊

HttpRequest:

是一種資料類型,它提供了一些方法用來定義或擷取HTTP請求的參數,

常用方法包括下面幾種:

設定請求連接配接

void setUrl(const char * url);

設定請求類型

void setRequestType(Type type);

這裡的Type是Cocos2d-x定義的一個枚舉類型,包括5種類型。

源碼:

class CC_DLL HttpRequest : public Ref
{
public:
    /**
     * The HttpRequest type enum used in the HttpRequest::setRequestType.
     */
    enum class Type
    {
        GET,
        POST,
        PUT,
        DELETE,
        UNKNOWN,
    };
...
}      

設定回調函數:

void setResponseCallback(Ref* pTarget,SEL_HttpResponse pSelector);

設定請求的資料,參數buffer是送出的資料,len是請求資料的長度(使用發送資料的實際長度):

void setRequestData(const char* buffer,unsigned int len);

頭檔案和命名空間:

#include "network/HttpRequest.h" //1
using namespace cocos2d::network; //2      

完整的Request對象建立

auto request = new HttpRequest();
    //設定請求網址
    request->setUrl("請填寫你需要請求的網址");
    //設定請求類型
    request->setRequestType(HttpRequest::Type::GET);
    //設定請求的資料
    char data[50] = "data";
    request->setRequestData(data,strlen(data));      

使用Cocos2d封裝的HttpClient發送請求

HttpClient:

用來控制請求相關的參數,比如發送請求,設定請求逾時時間。

它使用單例模型。 這一模式的目的是使得類的一個對象成為系統中的唯一執行個體。

cocos2d中多處用到這一模型。

比如Director對象,建立Director::getInstance().擷取的都是同一個對象,友善統一管理

又比如,音頻處理對象: SimpleAudioEngine::getInstance();

常用方法

發送請求:

send(HttpRequest* request)

設定連接配接逾時時間:

setTimeoutForConnect(int value)

#include "network/HttpClient.h"
using namespace cocos2d::network; //2      
//建立HttpClient對象
    auto client = HttpClient::getInstance();//getInstance靜态成員函數-單例模式模型
    client->setTimeoutForConnect(60);//當用戶端向服務端發送請求超過這個時間,就會傳回一個錯誤資訊
    client->setTimeoutForRead(100);//接收資料的讀取時間
    client->send(request);      

使用Cocos2d封裝的HttpResponse處理傳回的結果

HttpResponse:

包含伺服器傳回的資料等資訊。使用HttpResponse提供的方法可以擷取這些資料。

常用方法:

std::vector * getResponseData();

擷取請求傳回的資料 -傳回的是一個char型的數組

getResponseState

擷取伺服器傳回的狀态,傳回值是一個整數,200表示請求成功,400表示伺服器錯誤,404表示伺服器上找不到相應的檔案。

issucced(),用來判斷是否傳回成功。

//實作回調函數
void HelloWorld::complete(HttpClient *client, HttpResponse *response){
    //使用HttpResponse類的相關函數,擷取狀态和資料
    log("response code is:%d",response->getResponseCode());//擷取請求傳回的狀态碼
    if (response->isSucceed()){//判斷傳回是否成功  成功就傳回true
        std::vector<char> * data = response->getResponseData();
        log("response data is:");
        //for (int i = 0; i < data->size(); i++){
        //  log("%c",(*data)[i]);
        //  //因為data是一個指針,是以需要取内容操作符,(*data)這樣擷取的就是數組的首位址,然後再加上角标
        //}
    }

    else{
        log("error msg is:%s", response->getErrorBuffer()); // getErrorBuffer-會傳回請求資料錯誤的資訊
    }

}      

完整源代碼下載下傳位址:

GITHUB源碼下載下傳位址:

【​​點我進行下載下傳​​】

作者:谙憶, 所有權利保留。

歡迎轉載,分享是進步的源泉。

繼續閱讀