关于HttpClient的简介
HttpClient是Apache Jakarta Common下的子项目,用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建议。HttpClient它以可扩展的面向对象的结构实现了Http全部的方法(GET,POST,PUT,DELETE,HEAD,OPTIONS,and TRACE)。
关于HTTP的POST、GET、HEAD、PUT
GET:客户端向服务器请求指定的页面信息,并返回实体主体。
HEAD:只请求页面的首部。
POST:客户端请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。
PUT:从客户端向服务器传送的数据取代指定的文档的内容。
HEAD:只请求页面的首部。
POST:客户端请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。
PUT:从客户端向服务器传送的数据取代指定的文档的内容。
其中get和post是我们游戏中最常用到的.
如何使用cocos2dx的HttpClient
首先,加入头文件:
#include "extensions/cocos-ext.h" #include "network/HttpClient.h” using namespace cocos2d::network;
使用时的如下:
HttpRequest* request1 = new HttpRequest(); request1->setRequestType(HttpRequest::Type::GET);//这里是GET请求 request1->setUrl("https://httpbin.org/get"); request1->setResponseCallback(CC_CALLBACK_2(HelloWorld::onHttpRequestCompleted,this)); HttpClient::getInstance()->send(request1); request1->release(); HttpRequest* request2 = new HttpRequest(); request2->setUrl("http://httpbin.org/post"); request2->setRequestType(HttpRequest::Type::POST);//这里是POST请求 request2->setResponseCallback(CC_CALLBACK_2(HelloWorld::onHttpRequestCompleted,this)); // write the post data const char* postData = "visitor=cocos2d&TestSuite=Extensions Test/NetworkTest"; request2->setRequestData(postData,strlen(postData)); request2->setTag("POST test1"); cocos2d::network::HttpClient::getInstance()->send(request2); request2->release();
简单滴解析一下,上面用的服务端也是cocos引擎里面官方test中的地址,分别是:
https://httpbin.org/get
http://httpbin.org/post
本文是参考test中C++写的,test中也有lua版本的哦.
其中onHttpRequestCompleted是响应的函数.我这里是参考官方的test写的,只是把数据在log输出.没有进行其他的处理
编辑响应的函数onHttpRequestCompleted(),代码如下
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()); } long statusCode = response->getResponseCode(); char statusString[64] = {}; sprintf(statusString,"HTTP Status Code: %ld,tag = %s",statusCode,response->getHttpRequest()->getTag()); // _labelStatusCode->setString(statusString); log("response code: %ld",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("\n"); }
____________________________
相关资料推荐:
http://cn.cocos2d-x.org/article/index?type=cocos2d-x&url=/doc/cocos-docs-master/manual/framework/native/v3/httpclient/zh.md cocos2dx官方开发者文档--如何使用HttpClient:
http://www.2cto.com/kf/201404/295863.html cocos2d-x3.0 实现HTTP请求GET、POST