curl上传数据

size_t MonitorHandleData(void *buffer, size_t size, size_t nmemb, void *userp)
{
    int ret = -1;
    struct json_object *new_obj;
    debug_green("MonitorHandleData file:%s,size:%d,nmemb:%d\n", (char *)buffer, size, nmemb);
    new_obj = json_tokener_parse(buffer);
    if (!new_obj)
    {
        ret = -1;
        goto err_json_parse;
    }
    json_object_object_foreach(new_obj, key, val) 
    {
      
        if(strstr(key, "result") != NULL) {
            debug_blue("\t%s: %s\n", key, json_object_to_json_string(val));
            if(strstr(json_object_to_json_string(val), "\"false\"") != NULL) {
                ret = -1;
                goto err_billupload;
            }
        }
       if(strstr(key, "msg") != NULL) {
            debug_blue("\t%s: %s\n", key, json_object_to_json_string(val));
            }
               
    }
    return (size*nmemb);


err_billupload:
    json_object_put(new_obj);
err_json_parse:
   return 0;
}




int MonitorinfoUpload(void) 
{     
    CURL *curl;
    CURLM *multi_handle;
    char *monitorinfo="{\"mac\": \"12:34:56:78:90:06\", \"Posstate\": \"0\" , \"Gtsversion\": \"1\", \"Gtsupversion\": \"2\",\
    \"Opencomputertime\": \"3\", \"Errormsg\": \"4\", \"Msg\": \"5\",\"billcaptruerVer\": \"6\",\"ConverImageVer\": \"7\",\
    \"PortMonVer\": \"8\", \"updateVer\": \"9\",\"iniVer\": \"10\",\"webSocket\": \"11\", \"webSocketstate\": \"12\" }";
   
    int still_running;
    struct curl_httppost *formpost = NULL;
    struct curl_httppost *lastptr = NULL;
    struct curl_slist *headerlist = NULL;
    static const char buf[] = "Expect:";


    curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "mac", CURLFORM_COPYCONTENTS, LocalMac, CURLFORM_END);
    curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "devicetype", CURLFORM_COPYCONTENTS, "未知", CURLFORM_END);
    curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "monitorinfo", CURLFORM_COPYCONTENTS, monitorinfo, CURLFORM_END);
    


    curl = curl_easy_init();
    multi_handle = curl_multi_init();
    headerlist = curl_slist_append(headerlist, buf);
    if(curl && multi_handle) {
        curl_easy_setopt(curl, CURLOPT_URL, DeviceMonitorUrl);
        curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, MonitorHandleData);
      // curl_easy_setopt(curl, CURLOPT_WRITEDATA, monitorinfo);
        curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);
        curl_multi_add_handle(multi_handle, curl);
        curl_multi_perform(multi_handle, &still_running);
        while(still_running) {
            struct timeval timeout;
            int rc;
            fd_set fdread;
            fd_set fdwrite;
            fd_set fdexcep;
            int maxfd = -1;
            long curl_timeo = -1;


            FD_ZERO(&fdread);
            FD_ZERO(&fdwrite);
            FD_ZERO(&fdexcep);


            timeout.tv_sec = 1;
            timeout.tv_usec = 0;
            curl_multi_timeout(multi_handle, &curl_timeo);
            if(curl_timeo >= 0) {
                timeout.tv_sec = curl_timeo / 1000;
                if(timeout.tv_sec > 1)
                    timeout.tv_sec = 1;
                else
                    timeout.tv_usec = (curl_timeo % 1000) * 1000;
            }


            curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
            rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
            switch(rc) {
                case -1:
                    // select error 
                    LOGD("MonitorInfoUpload perform error\n");
                    break;
                case 0:
                default:
                    debug_yellow("MonitorInfoUpload perform!\n");
                    curl_multi_perform(multi_handle, &still_running);
                    LOGI("MonitorInfoUpload running: %d!\n", still_running);
                    break;
            }
        }
        curl_multi_cleanup(multi_handle);
        curl_easy_cleanup(curl);
        curl_formfree(formpost);
        curl_slist_free_all(headerlist);
    }


    debug_green("remove MonitorInfoUpload:%s\n", monitorinfo);
    return 0;
}
static void  *__MonitorinfoUpload(void *reg)
{
    int ret;
    while(1)
    {
        ret=MonitorinfoUpload();
        if(ret==0)
        {
            debug_yellow("监控信息上传一次\n");
            sleep(Shop_info.monitoringintervaltime);
        }
        else{
            debug_red("监控信息上传Failed!!!\n");
            break;
        }


    }


    return NULL;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值