在C語言中,我們可以通過使用libcurl庫來進行http請求,包括post和get請求。下面我們來介紹如何通過c代碼實現post請求并返回json數據。
首先,我們需要引入相關的頭文件,并初始化libcurl:
#includeint main(void) { CURL *curl; CURLcode res; curl = curl_easy_init(); if(curl) { /* set options */ } /* always cleanup */ curl_easy_cleanup(curl); return 0; }
接下來,設置post請求:
curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/api"); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "param1=value1¶m2=value2"); curl_easy_setopt(curl, CURLOPT_POST, 1L); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
其中,CURLOPT_URL為請求url,CURLOPT_POSTFIELDS為post請求參數,CURLOPT_POST為設置為post請求,CURLOPT_HTTPHEADER為請求頭。
然后,我們需要設置接收json數據的回調函數:
static size_t write_callback(char *ptr, size_t size, size_t nmemb, void *userdata) { size_t realsize = size * nmemb; return realsize; } /* set the callback function */ curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
最后,執行請求并獲取返回結果:
struct curl_slist *headers = NULL; CURLcode res; headers = curl_slist_append(headers, "Content-Type: application/json"); curl = curl_easy_init(); if(curl) { /* set options */ curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); res = curl_easy_perform(curl); if(res == CURLE_OK) { /* get the json data */ } /* always cleanup */ curl_easy_cleanup(curl); } curl_slist_free_all(headers);
在以上代碼中,我們通過curl_slist_append函數添加Content-Type請求頭,然后執行curl_easy_perform函數進行請求,并檢查返回結果是否成功。
最后,我們可以通過回調函數write_callback來獲取返回的json數據。
這就是如何通過c代碼實現post請求并獲取返回json數據的方法。