在C語言中,如果需要發送一個HTTP請求并接收JSON格式的響應數據,可以使用libcurl和cJSON兩個庫。其中,libcurl用于發送請求和接收響應,cJSON用于解析JSON格式的數據。
下面是一個簡單的示例代碼,實現了使用libcurl發送GET請求獲取JSON數據的功能:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <curl/curl.h>
#include <cJSON.h>
int main()
{
CURL *curl = NULL;
CURLcode res;
char *url = "http://localhost:3000/users";
char *response = NULL;
long http_code = 0;
cJSON *json = NULL;
curl = curl_easy_init();
if (curl)
{
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_HTTPGET, 1L);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &write_callback);
res = curl_easy_perform(curl);
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &http_code);
curl_easy_cleanup(curl);
if (res == CURLE_OK && http_code == 200) // 如果HTTP請求成功并且響應狀態碼為200
{
json = cJSON_Parse(response);
if (json) // 如果解析成功
{
// 在這里對JSON數據進行處理
cJSON_Delete(json);
}
}
free(response);
}
return 0;
}
// CURL回調函數,將響應數據保存在response中
size_t write_callback(char *ptr, size_t size, size_t nmemb, void *userdata)
{
size_t realsize = size * nmemb;
char *response = (char *)userdata;
response = (char *)realloc(response, realsize + 1);
if (response)
{
memcpy(response, ptr, realsize);
response[realsize] = '\0';
}
return realsize;
}
上述代碼中,使用libcurl發送了一個GET請求,并將響應數據保存在response中。在請求成功之后,使用cJSON庫將response解析成JSON對象,然后就可以對JSON數據進行處理。
需要注意的是,在使用C語言發送HTTP請求時,需要手動管理內存,避免出現內存泄漏等問題。同時,在解析JSON數據時,也要注意判斷解析結果是否正確,以避免因解析錯誤而導致程序崩潰。
上一篇html導航欄圖代碼
下一篇vue app公司