Cocos2d-x 之 Http 网络编程

本文详细介绍了在Cocos2d-x中如何利用HttpClient进行HTTP请求操作,包括GET和POST请求的具体实现方法,并提供了完整的代码示例。

HttpClient

HttpClient 是cocos中的一个 Http 客户端接口,通过 HttpClient 可以很容易都访问 Http 服务端。Http 访问主要有两种方式,Get 和 Post。
cocos2d-x 通过 HttpClient 与服务端通信主要有下面几个步骤:

  1. 创建Http请求HttpRequest;
  2. 设置请求的方式:HttpRequest::Type::GET或HttpRequest::Type::POST;
  3. 设置请求的URL地址;
  4. 设置请求回调处理函数;
  5. 设置发送数据(POST方式);
  6. 将请求添加到HttpClient的发送队列,让HttpClient发送请求;
  7. 关闭连接;
  8. 在回调函数里面处理服务端返回的数据。

使用之前要包含相应的库及声明使用命名空间

#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());
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值