HttpClient
HttpClient 是cocos中的一个 Http 客户端接口,通过 HttpClient 可以很容易都访问 Http 服务端。Http 访问主要有两种方式,Get 和 Post。
cocos2d-x 通过 HttpClient 与服务端通信主要有下面几个步骤:
- 创建Http请求HttpRequest;
- 设置请求的方式:HttpRequest::Type::GET或HttpRequest::Type::POST;
- 设置请求的URL地址;
- 设置请求回调处理函数;
- 设置发送数据(POST方式);
- 将请求添加到HttpClient的发送队列,让HttpClient发送请求;
- 关闭连接;
- 在回调函数里面处理服务端返回的数据。
使用之前要包含相应的库及声明使用命名空间
#include "network/HttpClient.h"
using namespace cocos2d::network;
Get方式示例:
void HelloWorld::createRequestWithGetType()
{
//创建http请求
HttpRequest *request = new HttpRequest;
request->setTag("get test");
//设置请求方式
request->setRequestType(HttpRequest::Type::GET);
//设置请求地址
request->setUrl("http://httpbin.org");
//设置请求回调函数
request->setResponseCallback(CC_CALLBACK_2(HelloWorld::onHttpResponse, this));
//添加请求到HttpClient任务队列
HttpClient::getInstance()->send(request);
//释放连接
request->release();
}
Post方式示例:
void HelloWorld::createRequestWithPostType()
{
//创建Http请求
HttpRequest* request = new HttpRequest();
request->setTag("post test");
//设置请求方式
request->setRequestType(HttpRequest::Type::POST);
//设置请求地址
request->setUrl("http://httpbin.org/post");
//设置请求回调函数
request->setResponseCallback(CC_CALLBACK_2(HelloWorld::onHttpResponse, this));
//设置发送数据
const char* postData = "name=coder&value=10";
request->setRequestData(postData, strlen(postData));
//发送请求
HttpClient::getInstance()->send(request);
//关闭连接
request->release();
}
回调函数处理:
void HelloWorld::onHttpResponse(HttpClient * pSender, HttpResponse * pResponse)
{
if (!pResponse)
{
return;
}
if (pResponse->isSucceed() == false)
{
log("response failed!");
return;
}
//获取回复码、请求的标签、请求的类型
char statusString[128];
sprintf(statusString, "HTTP Status Code:%d\nRequest tag:%s\nRequest type:%d", pResponse->getResponseCode(),pResponse->getHttpRequest()->getTag(),pResponse->getHttpRequest()->getRequestType());
log(statusString);
//获取数据
std::vector<char>* buffer = pResponse->getResponseData();
char content[102400];
int inx = 0;
for (std::vector<char>::iterator it = buffer->begin(); it != buffer->end(); it++)
{
content[inx++] = *it;
}
content[inx] = '\0';
//处理数据
if (pResponse->getHttpRequest()->getRequestType() == HttpRequest::Type::GET)
{
//get方式直接输出
log(content);
}
else if (pResponse->getHttpRequest()->getRequestType() == HttpRequest::Type::POST)
{
//post方式返回json数据
Document doc;
doc.Parse(content);
log(doc["form"]["name"].GetString());
log(doc["form"]["value"].GetString());
}
}