curl 的简单使用

#if CC_TARGET_PLATFORM == CC_PLATFORM_WIN32
#include "curl/include/win32/curl/curl.h"
#elif CC_TARGET_PLATFORM == CC_PLATFORM_IOS
#include "curl/include/ios/curl/curl.h"
#elif CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID
#include "curl/include/android/curl/curl.h"
#endif

 

//下载

  CURL *pCurl;   

  CURLcode nResCode;   

 pCurl = curl_easy_init();//初始化CURL取得初始化成功后的CURL指针   

 if (pCurl != NULL)   {

    curl_easy_setopt(pCurl, CURLOPT_URL, szFileUrl.c_str());    

  if (pFile != NULL) curl_easy_setopt(pCurl, CURLOPT_FILE, pFile); //指定写入的文件指针    

    curl_easy_setopt(pCurl, CURLOPT_WRITEFUNCTION, WriteCallback);  //设置写数据的回调函数    

      curl_easy_setopt(pCurl, CURLOPT_VERBOSE, TRUE);      //让CURL报告每一件意外的事情    

      curl_easy_setopt(pCurl, CURLOPT_TIMEOUT, 60);      //设置超时时间    

      curl_easy_setopt(pCurl, CURLOPT_NOPROGRESS, 0L);    

      curl_easy_setopt(pCurl, CURLOPT_PROGRESSFUNCTION, DownProgresss); //指定显示进度的回调函数   

      curl_easy_setopt(pCurl, CURLOPT_NOSIGNAL, 1L);   

      curl_easy_setopt(pCurl, CURLOPT_SSL_VERIFYPEER, false);    

      nResCode = curl_easy_perform(pCurl);        //执行上面设定的动作并返回状态码   

      curl_easy_cleanup(pCurl);           //释放相关资源    

    fclose(pFile);   

}

  //释放全局curl对象   

   curl_global_cleanup();

  //更新   

  if (nResCode == 0)   {

      Android_RunAPK(szSavePath.c_str());    

      GetFrameManager()->SetRootEnded();   

   }

 

//上传

 CURL *curl;  CURLcode res;

 struct curl_httppost *formpost = NULL;  

struct curl_httppost *lastptr = NULL;  

struct curl_slist *headerlist = NULL;  

static const char buf[] = "Expect:";

 curl_global_init(CURL_GLOBAL_ALL);

 /* Fill in the file upload field */  

CURLFORMcode formcode = curl_formadd(&formpost,   

  &lastptr,   

  CURLFORM_COPYNAME, "FileUpLoad",   

  CURLFORM_FILE, szFileUrl.c_str(),  //本地待上传文件,完整路径   

  CURLFORM_END);

 

 /* Fill in the filename field */  

formcode = curl_formadd(&formpost,   

  &lastptr,   

  CURLFORM_COPYNAME, "SaveFileN",   

  CURLFORM_COPYCONTENTS,

   szSaveN.c_str(),  //在http服务器保存的名字   

  CURLFORM_END);

 /* Fill in the submit field too, even if this is rarely needed */  

formcode = curl_formadd(&formpost,   

  &lastptr,   

  CURLFORM_COPYNAME, "submit",   

  CURLFORM_COPYCONTENTS, "Submit",   

  CURLFORM_END);

 curl = curl_easy_init();  

/* initalize custom header list (stating that Expect: 100-continue is not  wanted */  

headerlist = curl_slist_append(headerlist, buf);  

if (curl)  {  

   /* what URL that receives this POST */   

  std::string strWebUrl = StringUtils::format("%s/Default.aspx", GetProject()->GetWebUrl());

    /* what URL that receives this POST */   

  curl_easy_setopt(curl, CURLOPT_URL, strWebUrl.c_str());   

  curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);                           

  curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1L);   

  curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false);

  res = curl_easy_perform(curl);   

  /* Check for errors */   

  if (res != CURLE_OK) fprintf(stderr, "curl_easy_perform() failed: %s\n",curl_easy_strerror(res));  

   /* always cleanup */   

  curl_easy_cleanup(curl);   

  /* then cleanup the formpost chain */   

  curl_formfree(formpost);   

  /* free slist */   

  curl_slist_free_all(headerlist);  

}

 

posted @ 2017-04-26 13:21  柳刚  阅读(575)  评论(0编辑  收藏  举报