curl學習(三):使用POST的處理方法

使用POST的處理方法

#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

char recv_buffer[10240] = {0};
size_t recv_buffer_len;
#define MIN(x,y) ((x)<(y)?(x):(y))

static size_t fun_callback(void *buffer, size_t size, size_t block, void *f_user)
{
    unsigned length;
    unsigned int r_left_len = 0;
    unsigned copy_len = 0;

    length = size * block;
    if(length == 0){
        return 0;
    }

    r_left_len = sizeof(recv_buffer) - recv_buffer_len -1;
    copy_len = MIN(length, r_left_len);
    memcpy(recv_buffer + recv_buffer_len, buffer, copy_len);
    recv_buffer_len += copy_len;
    return length;
} 

static size_t get_http_post(void)
{
    CURL *curl = NULL;
    CURLcode res;
    char post_data[128] = {0};
    const char *url = "http://xxxxxx";

    memset(recv_buffer, 0, sizeof(recv_buffer));
    recv_buffer_len = 0;
    curl = curl_easy_init();
    if(!curl){
        return 0;
    }

    snprintf(post_data, sizeof(post_data), 
                                "{                        \
                                    \"name\":\"binbin\",  \
                                    \"id\":1              \
                                 }");
    curl_easy_setopt(curl, CURLOPT_URL, url);
    curl_easy_setopt(curl, CURLOPT_TIMEOUT, 3);
    curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1L);
    curl_easy_setopt(curl, CURLOPT_POST, 1L);
    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, post_data);
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &fun_callback);
    res = curl_easy_perform(curl);
    if(res == CURLE_OK){
        printf("--->%s<---\n",recv_buffer);
    }
    curl_easy_cleanup(curl);
    return 0;
}

int main(void)
{
    get_http_post();
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章