cocos2d-x 网络编程Curl

来源:互联网 发布:无锡行知科技学校 编辑:程序博客网 时间:2024/05/16 07:45
1 CURLcode curl_global_init(long flags); 

描述: 
这个函数只能用一次。(其实在调用curl_global_cleanup 函数后仍然可再用) 
如果这个函数在curl_easy_init函数调用时还没调用,它讲由libcurl库自动完成。 

参数:flags 

CURL_GLOBAL_ALL    //初始化所有的可能的调用。 
CURL_GLOBAL_SSL    //初始化支持 安全套接字层。 
CURL_GLOBAL_WIN32 //初始化win32套接字库。 
CURL_GLOBAL_NOTHING     //没有额外的初始化。 


2 void curl_global_cleanup(void); 

描述:在结束libcurl使用的时候,用来对curl_global_init做的工作清理。类似于close的函数。 

3 char *curl_version( ); 

描述: 打印当前libcurl库的版本。 


4 CURL *curl_easy_init( ); 

描述: 
curl_easy_init用来初始化一个CURL的指针(有些像返回FILE类型的指针一样). 相应的在调用结束时要用curl_easy_cleanup函数清理. 
一般curl_easy_init意味着一个会话的开始. 它的返回值一般都用在easy系列的函数中. 

5 void curl_easy_cleanup(CURL *handle); 

描述: 
这个调用用来结束一个会话.与curl_easy_init配合着用. 

参数: 
CURL类型的指针. 

6 CURLcode curl_easy_setopt(CURL *handle, CURLoption option, parameter); 

描述: 这个函数最重要了.几乎所有的curl 程序都要频繁的使用它. 
它告诉curl库.程序将有如何的行为. 比如要查看一个网页的html代码等. 
(这个函数有些像ioctl函数) 

参数: 
1 CURL类型的指针 
2 各种CURLoption类型的选项.(都在curl.h库里有定义,man 也可以查看到) 
3 parameter 这个参数 既可以是个函数的指针,也可以是某个对象的指针,也可以是个long型的变量.它用什么这取决于第二个参数. 

CURLoption 这个参数的取值很多.具体的可以查看man手册. 

7 CURLcode curl_easy_perform(CURL *handle); 

描述:这个函数在初始化CURL类型的指针 以及curl_easy_setopt完成后调用. 就像字面的意思所说perform就像是个舞台.让我们设置的 
option 运作起来. 

参数: 

CURL类型的指针




例子:

  1. static bool isLogin;  
  2.   
  3. CurlTest::CurlTest()  
  4. {  
  5.     CCLabelTTF* label = CCLabelTTF::create("Curl Test""Arial", 28);  
  6.     addChild(label, 0);  
  7.     label->setPosition( ccp(VisibleRect::center().x, VisibleRect::top().y-50) );  
  8.   
  9.     setTouchEnabled(true);  
  10.   
  11.     // create a label to display the tip string  
  12.     m_pLabel = CCLabelTTF::create("Touch the screen to connect""Arial", 22);  
  13.     m_pLabel->setPosition(VisibleRect::center());  
  14.     addChild(m_pLabel, 0);  
  15.       
  16.     m_pLabel->retain();  
  17.     isLogin=false;  
  18. }  
  19.   
  20.   
  21. // the test code is  
  22. // http://curl.haxx.se/mail/lib-2009-12/0071.html  
  23. void CurlTest::ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent)  
  24. {  
  25.     CURL *curl;  
  26.     CURLcode res;  
  27.     char buffer[10];  
  28.     string strHtml;  
  29.     string strRetData = "";  
  30.   
  31.     curl = curl_easy_init();  
  32.     if (curl)   
  33.     {  
  34.                 curl_easy_setopt(curl, CURLOPT_URL, "http://localhost/mobTest.php?user=cistudio&password=123");  
  35. curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, HttpWriteString);  
  36. curl_easy_setopt(curl, CURLOPT_WRITEDATA, strHtml);  
  37. curl_easy_setopt(curl, CURLOPT_FAILONERROR, true);  
  38. curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10);  
  39. // 对认证证书来源的检查,0表示阻止对证书的合法性的检查。  
  40. curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);  
  41.   
  42. // 从证书中检查SSL加密算法是否存在  
  43. curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 1);  
  44.   
  45. //模拟用户使用的浏览器,在HTTP请求中包含一个”user-agent”头的字符串。  
  46. curl_easy_setopt(curl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.0)");  
  47. //curl_easy_setopt(curl,CURLOPT_COOKIEFILE,"cookiefile.txt");  
  48. //将登录信息记录并生成到一个cookies文件中  
  49. curl_easy_setopt(curl,CURLOPT_COOKIEJAR,"cookiefile.txt");  
  50.         //curl_easy_setopt(curl, CURLOPT_HEADER, 0);   // 不返回header部分  
  51.         //curl_easy_setopt(curl, CURLOPT_NOBODY, true);   // 不返回header部分  
  52. // 获取的信息以文件流的形式返回,而不是直接输出。  
  53. curl_easy_setopt(curl, CURLOPT_TRANSFERTEXT,1);  
  54.   
  55.   
  56.         res = curl_easy_perform(curl);  
  57.         /* always cleanup */  
  58.         curl_easy_cleanup(curl);  
  59.         if (res == CURLE_OK)  
  60.         {  
  61.             m_pLabel->setString("0 response");  
  62.             strRetData = strHtml;  
  63.      
  64.     CCLOG("Http get string, ret: %s",  strRetData.c_str());  
  65.         }  
  66.         else  
  67.         {  
  68.             sprintf(buffer,"code: %i",res);  
  69.             m_pLabel->setString(buffer);  
  70.         }  
  71.     }   
  72.     else   
  73.     {  
  74.         m_pLabel->setString("no curl");  
  75.     }   
  76. }  
  77.   
  78. size_t CurlTest::HttpWriteString(uint8_t* ptr,size_t size,size_t number,void *stream)    
  79. {    
  80. char tmpStr[10];  
  81. sprintf(tmpStr,"%s",ptr);  
  82.   if(tmpStr=="OK"){  
  83.       isLogin=true;  
  84.   
  85.   }else{  
  86.       isLogin=false;  
  87.   }  
  88.               CURL *curl;  
  89.     CURLcode res;  
  90.   
  91.     curl = curl_easy_init();  
  92.     if (curl)   
  93.     {  
  94.                 curl_easy_setopt(curl, CURLOPT_URL, "http://localhost/isLoginTest.php");  
  95. curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, getLoginState);  
  96. curl_easy_setopt(curl, CURLOPT_FAILONERROR, true);  
  97. curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10);  
  98. // 对认证证书来源的检查,0表示阻止对证书的合法性的检查。  
  99. curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);  
  100.   
  101. // 从证书中检查SSL加密算法是否存在  
  102. curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 1);  
  103.   
  104. //模拟用户使用的浏览器,在HTTP请求中包含一个”user-agent”头的字符串。  
  105. curl_easy_setopt(curl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.0)");  
  106.   
  107.         //curl_easy_setopt(curl, CURLOPT_HEADER, 0);   // 不返回header部分  
  108.         //curl_easy_setopt(curl, CURLOPT_NOBODY, true);   // 不返回header部分  
  109. //读取cookies中的信息供给服务器调用  
  110. curl_easy_setopt(curl,CURLOPT_COOKIEFILE,"cookiefile.txt");  
  111. //curl_easy_setopt(curl,CURLOPT_COOKIEJAR,"cookiefile.txt");  
  112.   
  113.   
  114.         res = curl_easy_perform(curl);  
  115.         /* always cleanup */  
  116.         curl_easy_cleanup(curl);  
  117.         if (res == CURLE_OK)  
  118.         {  
  119.            CCLog("completes getLoginState");  
  120.         }  
  121.     }  
  122.     CCLog("%s%1d",ptr,number);    
  123.     return size*number;//这里一定要返回实际返回的字节数    
  124. }  
  125.   
  126. size_t CurlTest::getLoginState(uint8_t* ptr,size_t size,size_t number,void *stream)    
  127. {    
  128.   
  129.     CCLog("%s",ptr);    
  130.     return size*number;//这里一定要返回实际返回的字节数    
  131. }  
  132.   
  133. CurlTest::~CurlTest()  
  134. {  
  135.     m_pLabel->release();  
  136. }  
  137.   
  138. void CurlTestScene::runThisTest()  
  139. {  
  140.     CCLayer *pLayer = new CurlTest();  
  141.     addChild(pLayer);  
  142.   
  143.     CCDirector::sharedDirector()->replaceScene(this);  
  144.     pLayer->release();  
  145. }  


0 0
原创粉丝点击