用curl库压缩成发送字符串为utf8并用curl库发送

#include <curl/curl.h>

int my_curl_init(void)
{
    curl_global_init(CURL_GLOBAL_ALL);
    return 1;
}


void my_curl_end(void)
{
    curl_global_cleanup();
    return;
}
        
int my_curl_post_parse(void* buffer, size_t size, size_t nmemb, char * useless)  
{  
    memcpy(useless+strlen(useless), (char *)buffer, size*nmemb);
    //if (1 == tunable_nd_debug_http_reponsed)
    //    printf("-------%s\n", useless);
    return size*nmemb;  
}
        
int my_curl_post_get(char *send_data, const char *url) 
{
    (void) nWriteLog;
    if (!send_data)
        return 0;
    CURLcode res;
    CURL *curl;
    int iRet = 1;
    char szBuf[2048];
    struct curl_slist *chunk =0;


    curl = curl_easy_init();
    if (!curl)
        return 0;
    char* send_data_urlencode = curl_easy_escape(curl, send_data, strlen(send_data));
    if (!send_data_urlencode)
    {
        curl_free(send_data_urlencode);
        curl_easy_cleanup(curl);
        return 0;
    }
 
    int nTotalLen = strlen(send_data_urlencode);
    int nOffset = 0;
    if (nTotalLen < 1)
    {
        curl_easy_cleanup(curl);
        return 0;
    }
    for (int i = 0; i < nTotalLen; i++)
    {
        char v = send_data_urlencode[i];
        switch (v)
        {
        case '%':
            if ((i + 2) < nTotalLen)
            {
                if ('3' == send_data_urlencode[i + 1])
                {
                    if ('D' == send_data_urlencode[i + 2])
                    {
                        send_data_urlencode[nOffset] = '=';
                        i += 2;
                        nOffset++;
                        continue;
                    }
                }
                else if ('2' == send_data_urlencode[i + 1])
                {
                    if ('6' == send_data_urlencode[i + 2])
                    {
                        send_data_urlencode[nOffset] = '&';
                        i += 2;
                        nOffset++;
                        continue;
                    }
                }
            }
            break;
        default:
            break;
        }
        send_data_urlencode[nOffset] = v;
        nOffset++;
    }
    send_data_urlencode[nOffset] = 0;
    chunk = curl_slist_append(chunk, "Content-Type: application/x-www-form-urlencoded");
    sprintf(szBuf, "Content-Length: %ld", strlen(send_data_urlencode));
    chunk = curl_slist_append(chunk, szBuf);
    curl_easy_setopt(curl, CURLOPT_HTTPHEADER, chunk);
    curl_easy_setopt(curl, CURLOPT_URL, url);  
    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, send_data_urlencode);   
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, my_curl_post_parse); 
    memset(szBuf, 0, sizeof(szBuf));
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&szBuf); 
    curl_easy_setopt(curl, CURLOPT_POST, 1);
    curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
    curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1L);
    curl_easy_setopt(curl, CURLOPT_FORBID_REUSE, 1);
    curl_easy_setopt(curl, CURLOPT_TIMEOUT, 5L);
    long httpcode = 0;
    res = curl_easy_perform(curl);   
    if (res == CURLE_OK)
    {           
        if (CURLE_OK == curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &httpcode))
        {
            plog("httpcode=%ld", httpcode);
        }
    }
    int nSuccess = 0;
    if (strstr(szBuf, "\"Code\":13000"))
    {
        nSuccess=1;
    }
    
    if (200 == httpcode)
    {
        iRet = 1;
        if ( 0 == nSuccess) 
        {          
        }
    }
    else
    {
        iRet = -1;
    }
    curl_free(send_data_urlencode);
    curl_easy_cleanup(curl);
    return iRet;
}


调用的代码如下:
 my_curl_init();
 int  nRet = my_curl_post_get( SendDataBuf, tunable_nd_log_url);
 my_curl_end(); 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值