【Cocos2d-x】Cocos2d-X网络编程-HttpRequest/HttpClient/HttpResponse

简介: 【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; //


//创建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源码下载地址: 点我进行下载


目录
相关文章
|
1月前
|
数据采集 前端开发 Java
利用Scala与Apache HttpClient实现网络音频流的抓取
利用Scala与Apache HttpClient实现网络音频流的抓取
|
9月前
|
API
.net core基于HttpClient实现的网络请求库
.net core基于HttpClient实现的网络请求库
146 0
|
编解码 Dart 网络协议
Flutter(十九)——网络编程:HttpClient与http库
Flutter(十九)——网络编程:HttpClient与http库
316 1
【.Net MF网络开发板研究-03】获取雅虎天气(HttpClient示例)
在网络开发板上实现Http Client,获取雅虎网站的天气信息,并把这些信息在LCD上显示出来。
641 0
【Cocos2d-x】Cocos2d-X网络编程-HttpRequest/HttpClient/HttpResponse
Cocos2d-x封装了3个类来处理HTTP请求: HttpRequest,HttpClient和HttpResponse. 使用HttpRequest,HttpClient和HttpResponse这3个类进行Http进行请求时,需要遵循一定流程 请求过程: 1.创建HttpRequest的实例。
1710 0
|
Android开发 数据安全/隐私保护 数据格式
12_Android中HttpClient的应用,doGet,doPost,doHttpClientGet,doHttpClient请求,另外借助第三方框架实现网络连接的应用,
 准备条件, 编写一个web项目。编写一个servlet,若用户名为lisi,密码为123,则返回“登录成功”,否则”登录失败”。项目名为ServerItheima28。代码如下: package com.itheima28.servlet;   import java.io.IOException; import java.io.PrintWriter;
1273 0
|
XML Java Android开发
11_Android中HttpClient的应用,读取网络xml及xml解析流,Handler的应用,LayoutInflater的使用,SmartImageView的使用
 1 所需的web项目结构如下: 2 new.xml的文件内容如下: &lt;?xml version="1.0" encoding="UTF-8" ?&gt; &lt;news&gt;          &lt;new&gt;                    &lt;title&gt;3Q大战宣判: 腾讯获赔500万&lt;/title&gt;
1396 0