Cocos2d-x cURL简单示例demo


前面转载了两篇有关cURL的文章,都很详细 。说实话,看的不是很懂。下面通过引擎中的一个例子来看看。

(1)关于这个curl这个类的文件所在位置,libs/cocos2dx/platform/third_party/ios/curl  就可以看到curl有关的文件了。

(2)关于引擎中自带的例子:CurlTest

其中与curl有关的代码如下:

void CurlTest::ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent)
{
    CURL *curl;
    CURLcode res;
    char buffer[10];
    curl = curl_easy_init();
    if (curl)
    {
        curl_easy_setopt(curl, CURLOPT_URL, "www.google.com");
        res = curl_easy_perform(curl);
        /* always cleanup */
        curl_easy_cleanup(curl);
        if (res == 0)
        {
            m_pLabel->setString("0 response");
        }
        else
        {
            sprintf(buffer,"code: %i",res);
            m_pLabel->setString(buffer);
        }
        
    }
    else 
    {
        m_pLabel->setString("no curl");
    } 
}


(3)下面是一个类似的代码:

注意添加: curl_global_init(CURL_GLOBAL_DEFAULT) -- 全局初始化函数,程序中只调用一次。参数包括:

#define CURL_GLOBAL_SSL (1<<0)
#define CURL_GLOBAL_WIN32 (1<<1)
#define CURL_GLOBAL_ALL (CURL_GLOBAL_SSL|CURL_GLOBAL_WIN32)
#define CURL_GLOBAL_NOTHING 0
#define CURL_GLOBAL_DEFAULT CURL_GLOBAL_ALL


//定义的写数据的回调函数。 但是在回调函数中只是将获取到的数据输出而已
size_t write_data(void *buffer, size_t size, size_t nmemb, void *stream)
{
    printf("%s",(char*)buffer);
    return size*nmemb;//这里一定要返回实际返回的字节数
}

//修改触屏结束的函数处理。
void HelloWorld::ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent)
{
    //首先,使用CURL必须要创建一个CULR指针,它是CURL的全局句柄。
    CURL *curl;
    
    //这里定义一个CURL库中API的返回值,用于取得API调用的结果。
    CURLcode res;
    
    //第一步:初始化CURL,取得初始化成功后的CURL指针。
    curl = curl_easy_init();    
    
    if(curl) {
        
        //第二步,设定我们用此CURL指针来完成的动作。参数一为CURL指针,参数二为相应的动作类型枚举,这个枚举值在curl.h中定义,比如本例中的CURLOPT_URL,定义为CINIT(URL,  OBJECTPOINT, 2),即联接一个网站的HTTP服务。参数三为动作对应的数据参数,这里是网站的URL地址。
        curl_easy_setopt(curl, CURLOPT_URL, "http://www.baidu.com");
                
        // curl_easy_setopt
        //设置写数据的回调函数。
        res = curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
        
        if(res != CURLE_OK){
            printf("curl_easy_setopt not return CURLE_OK\n");
        }
        else{
            printf("curl_easy_setopt exec success\n");
        }

        //第三步,执行上面设定的动作处理。返回结果放在res中。
        res = curl_easy_perform(curl);
        
        if(res != CURLE_OK){
            printf("curl_easy_perform not return CURLE_OK\n");
        }
        else{
            printf("curl_easy_perform exec success\n");
            
        }
        /* always cleanup */
        //最后一步,清除CURL指针,结束对CURL库的使用。  
        curl_easy_cleanup(curl);
    }
    
}

解释一下这段代码:启动程序,点击屏幕,触发touchEnded这个函数,在这个函数中联网到www.baidu.com,在回调方法中输出获取到的数据,将这些数据保存为html文件,双击这个文件,就是百度首页界面了。

游戏运行终端输出:

curl_easy_setopt exec success

<!DOCTYPE html><!--STATUS OK--><html><head><meta http-equiv="content-type" content="text/html;charset=utf-8"><title>百度一下,你就知道</title><style >html,body{height:100%}html{overflow-y:auto}#wrapper{position:relative;_position:;min-height:100%}#content{padding-bottom:100px;text-align:center}#ftCon{height:100px;position:absolute;bottom:44px;text-。。。。。。。。。。。。。。。。。

curl_easy_perform exec success

总结:说实话,对应cURL确实是不懂,现在刚刚开始,有点印象,以后用的再深入了解吧!

你可能感兴趣的:(C++,curl,cocos2d-x)