在web開發中,我們常常需要向服務器發送HTTP請求,并處理服務器返回的數據。而請求和返回的數據格式往往是JSON格式。在C語言中,可以使用cURL庫來發送HTTP請求,并使用json-c庫來處理JSON格式的數據。
首先,我們需要在程序中引入cURL和json-c庫:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <curl/curl.h> #include <json/json.h>
接著,我們可以編寫請求函數,用于向服務器發送HTTP請求。下面的代碼是一個使用GET方法請求URL的函數:
char *http_get(const char *url) { CURL *curl; CURLcode res; char *buf = NULL; curl = curl_easy_init(); if(curl) { curl_easy_setopt(curl, CURLOPT_URL, url); curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buf); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback); res = curl_easy_perform(curl); if(res != CURLE_OK) { fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); } curl_easy_cleanup(curl); } return buf; }
這個函數使用了cURL庫中的curl_easy_init()初始化和curl_easy_cleanup()清理函數,curl_easy_setopt()設置請求選項,并使用了回調函數write_callback()來處理服務器返回的數據。在write_callback()函數中,我們使用了json-c庫中的json_object_from_string()函數來將服務器返回的JSON數據字符串解析為JSON對象。
size_t write_callback(char *ptr, size_t size, size_t nmemb, char **buf) { size_t buf_len = size * nmemb; *buf = realloc(*buf, buf_len + 1); if(*buf == NULL) { fprintf(stderr, "realloc() failed\n"); return 0; } strncat(*buf, ptr, buf_len); return buf_len; } json_object *parse_json(const char *json_str) { json_object *jobj = json_object_from_string(json_str); if(jobj == NULL) { fprintf(stderr, "json_object_from_string() failed\n"); return NULL; } return jobj; }
最后,我們可以使用parse_json()函數來將服務器返回的JSON數據字符串解析為JSON對象,并使用json-c庫中的相關函數來處理JSON對象中的數據。
在C語言中,使用cURL和json-c庫處理HTTP請求和JSON數據十分方便。通過編寫一些簡單的函數,我們就可以輕松地發送HTTP請求,并處理服務器返回的JSON數據。