cocos2d-x自带的CCHttpClient下载百度网页并写入成网页文件
来源:互联网 发布:java app接口开发实例 编辑:程序博客网 时间:2024/05/23 17:50
cocos2d-x自带的CCHttpClient下载百度网页并写入成网页文件
基于cocos2d-x做的网络游戏越来越多,移动设备的联网一般使用的是http连接,cocos2d-x自带了CCHttpClient作为http连接,这里我们就用它做一个简单的小例子,http请求连接到百度,然后把返回的数据写成一个叫做baidu.html的文件,然后打开它,用以模拟与服务器的交互。
1.新建一个cocos2d-x的空工程,然后新建一个类,名字叫做HttpConnectToBaidu,下面就是我写的代码,直接粘贴过来吧。
HttpConnectToBaidu.h
//// HttpConnectToBaidu.h// TestHttpToBaidu//// Created by 江南岸 on 13-3-19.////#ifndef __TestHttpToBaidu__HttpConnectToBaidu__#define __TestHttpToBaidu__HttpConnectToBaidu__#include <iostream>#include "cocos2d.h"#include "HttpClient.h"#include "HttpRequest.h"USING_NS_CC;USING_NS_CC_EXT;class HttpConnectToBaidu :public CCObject{public: HttpConnectToBaidu(); ~HttpConnectToBaidu(); static HttpConnectToBaidu *create(); void viewDidLoad(); void httpRequestFinish(CCNode *node,CCObject *_data); void writeToHTMLFile(const char *fileContent);};#endif /* defined(__TestHttpToBaidu__HttpConnectToBaidu__) */
HttpConnectToBaidu.cpp文件
//// HttpConnectToBaidu.cpp// TestHttpToBaidu//// Created by 江南岸 on 13-3-19.////#include "HttpConnectToBaidu.h"HttpConnectToBaidu::HttpConnectToBaidu(){ }HttpConnectToBaidu::~HttpConnectToBaidu(){ }HttpConnectToBaidu* HttpConnectToBaidu::create(){ HttpConnectToBaidu *http = new HttpConnectToBaidu(); if(http) { http->autorelease(); return http; } CC_SAFE_DELETE(http); return NULL;}void HttpConnectToBaidu::viewDidLoad(){ //获得CCHttpClient的实例,这里写成了单例类 CCHttpClient *httpClient = CCHttpClient::getInstance(); //new一个CCHttpRequest,创建一个http请求 CCHttpRequest *request = new CCHttpRequest(); /* 设置 HttpRequestType ,其中有Get 方式,Post方式,还有一个unknown(没想到他还给写错了,少写了一个字母n) typedef enum { kHttpGet, kHttpPost, kHttpUnkown, } HttpRequestType; */ //这里我们用的是Get方式 request->setRequestType(CCHttpRequest::kHttpGet); //设置我们想要连接的URl地址,我们这里想要连接百度,也就是 http://www.baidu.com request->setUrl("http://www.baidu.com"); //设置回调函数,这个回调函数是说当服务器响应Get请求后下发的数据 request->setResponseCallback(this, callfuncND_selector(HttpConnectToBaidu::httpRequestFinish)); //设置tag,我们可以设置一个字符串作为tag,这个tag我们将在返回数据的response中得到 request->setTag("Connection_To_Baidu"); //设置响应时间 httpClient->setTimeoutForConnect(30); //设置发送数据,当我们与服务器进行交互式,可以把数据放在这里,基本上都是Post方式向服务器发送数据,这里我们就不使用了 // request->setRequestData("", 0); //好了,请求包我们已经封装好了,下面我们就把它发送出去 httpClient->send(request); //记得把 new 出来的request请求release掉,不可以用autorelease request->release();}//服务器响应请求之后,返回的数据void HttpConnectToBaidu::httpRequestFinish(cocos2d::CCNode *node,CCObject *_data){ //把接收到的数据转换成 CCHttpResponse 类型 CCHttpResponse *response = (CCHttpResponse*)_data; //我们首先判断数据接收是否成功 if(!response->isSucceed()) { printf("error is here %s",response->getErrorBuffer()); return; } //还记得上面的 request->setTag("Connection_To_Baidu"); 吗,我们可以在response中得到tag值 const char* tag = response->getHttpRequest()->getTag(); if(0 == strcmp(tag, "Connection_To_Baidu")) { //如果tag值与我们设置的字符串相同的话,就说明这个请求是上面我们写的 //response->getResponseData() 返回的数据类型是一个向量std::vector<char>类型,我们需要做一些转换 std::vector<char> *data = response->getResponseData(); int vectorLength = data->size(); if(vectorLength <= 0) { printf("ResponseData is null"); return; } //定义一个字符串接收数据 std::string recieveData; for(int i=0;i<vectorLength;i++) { recieveData += (*data)[i]; } recieveData += '\0'; printf("recieve data is %s",recieveData.c_str()); writeToHTMLFile(recieveData.c_str()); } }//写入文件,由于我用的是Xcode,所以这个文件会写入到iphone模拟器的Library文件夹中//至于如何找到这个文件夹,请看我的另一篇文章《找到iphone模拟器中的plist文件》void HttpConnectToBaidu::writeToHTMLFile(const char *fileContent){ //通过cocos2d-x自带的CCFileUtils类我们可以找到Library下面的Caches文件夹,也就是UserDefault.xml文件夹的位置 std::string filePath = CCFileUtils::sharedFileUtils()->getWriteablePath(); //我们把它写成一个叫baidu.html的文件 filePath.append("baidu.html"); FILE *file; //我们这里采用的是 wb 的方式,详情参见下面介绍 file = fopen(filePath.c_str(), "wb"); /* mode有下列几种形态字符串: r 以只读方式打开文件,该文件必须存在。 r+ 以可读写方式打开文件,该文件必须存在。 rb+ 读写打开一个二进制文件,允许读数据。 rw+ 读写打开一个文本文件,允许读和写。 w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。 w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。 a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留) a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留) wb 只写打开或新建一个二进制文件;只允许写数据。 wb+ 读写打开或建立一个二进制文件,允许读和写。 ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。 at+ 打开一个叫string的文件,a表示append,就是说写入处理的时候是接着原来文件已有内容写入,不是从头写入覆盖掉,t表示打开文件的类型是文本文件,+号表示对文件既可以读也可以写。 */ if(!file) { printf("open file error !!! "); return; } fwrite(fileContent, 1, strlen(fileContent), file); //记得关闭文件 fclose(file);}
打开HelloWorldScene.cpp文件,把关闭按钮的响应事件改成如下代码,然后运行项目,点击关闭按钮,会看到控制台打出了百度的响应信息,然后找到Library目录,会看到我们写入的baidu.html文件
void HelloWorld::menuCloseCallback(CCObject* pSender)
{
HttpConnectToBaidu *http = HttpConnectToBaidu::create();
http->viewDidLoad();
}
看地址栏啊,地址栏可不是www.baidu.com ,而是我们写入的文件的地址啊
- cocos2d-x自带的CCHttpClient下载百度网页并写入成网页文件
- [cocos2d-x]CCHttpClient的一个bug
- CURL 爬虫,抓取网页并写入文件
- cocos2d-x CCHttpClient 访问网络
- 百度云大文件网页直接下载
- 学习cocos2d-x自带的SimpleGame
- IE自带的网页过渡特效
- IE自带的网页过渡特效
- 使用java自带的库下载网页源码和头部信息
- JAVA获取网页源码并写入html文件
- Cocos2d-x-3. X使用自带的物理引擎
- cocos2d-x 自带动画
- 使用CCHttpClient进行cocos2d-x网络编程
- 使用CCHttpClient进行cocos2d-x网络编程
- 使用CCHttpClient进行cocos2d-x网络编程
- 使用CCHttpClient进行cocos2d-x网络编程
- 使用CCHttpClient进行cocos2d-x网络编程
- cocos2d-x Android打开网页
- flash 游戏在网页上不能正常加载
- JAVA中this用法小结
- Java 理论与实践: JDK 5.0 中更灵活、更具可伸缩性的锁定机制
- a+b(整数)
- IOs动态调整 UITableViewCell的高度
- cocos2d-x自带的CCHttpClient下载百度网页并写入成网页文件
- vi/vim 基本使用方法
- servlet中参数的传递方式
- 单例设计模式
- Android 触摸响应处理逻辑
- 使用JAXB处理JavaBean和XML的转换
- apache -tomcat 负载均衡 --只为学习
- 正则表达式 实例
- Three20学习之清空网络缓存