C語言是一種廣泛應用的編程語言,既可以用于嵌入式系統開發,也可以用于服務器端編程。在服務器端編程中,經常需要使用HTTP協議來進行數據傳輸。而HTTP協議中,GET和POST是兩種常見的數據請求方式,JSON是一種常見的數據格式。
在C語言中,獲取GET和POST請求的參數以及解析JSON數據,都需要借助第三方庫。下面介紹一下如何使用libcurl庫來實現這些功能。
//使用libcurl庫發送GET請求 #include <curl/curl.h> int main(void) { CURL *curl; CURLcode res; curl = curl_easy_init(); if(curl) { curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/get?param1=value1¶m2=value2"); 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 0; }
以上代碼向http://example.com/get?param1=value1¶m2=value2發送了一個GET請求。參數可以在URL中直接拼接,也可以使用libcurl庫提供的CURLOPT_POSTFIELDS選項,將參數以字符串的形式傳遞給服務器。
//使用libcurl庫發送POST請求,并帶上參數 #include <string.h> #include <curl/curl.h> int main(void) { CURL *curl; CURLcode res; curl = curl_easy_init(); if(curl) { char *params = "param1=value1¶m2=value2"; curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/post"); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, params); 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 0; }
以上代碼向http://example.com/post發送了一個POST請求,并攜帶了參數param1=value1¶m2=value2。同樣地,參數也可以通過一個字符串來傳遞。
//使用libcurl庫解析JSON數據 #include <stdio.h> #include <json-c/json.h> int main() { char *json_str = "{ \"name\": \"John\", \"age\": 30 }"; json_object *jobj = json_tokener_parse(json_str); json_object *jname, *jage; const char *name; int age; json_object_object_get_ex(jobj, "name", &jname); json_object_object_get_ex(jobj, "age", &jage); name = json_object_get_string(jname); age = json_object_get_int(jage); printf("Name: %s\n", name); printf("Age: %d\n", age); json_object_put(jobj); return 0; }
以上代碼使用json-c庫解析了一個JSON字符串,獲取了其中的name和age字段。json-c庫提供了豐富的函數,可以方便地進行JSON數據的解析和構造。