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源碼下載下傳位址:
【點我進行下載下傳】
作者:谙憶, 所有權利保留。
歡迎轉載,分享是進步的源泉。