要使用C语言通过HTTP协议向服务器发送请求并接收响应,你可以使用如libcurl这样的库来发送HTTP请求。libcurl是一个免费且易于使用的客户端URL传输库,支持多种协议,包括HTTP。同时,为了解析服务器响应中的JSON数据,你可以使用cJSON库,这是一个轻量级的JSON解析库。
以下是一个简单的示例,展示如何使用libcurl发送HTTP请求,并使用cJSON解析响应数据:
首先,确保你已经安装了libcurl和cJSON库。
```c
#include <stdio.h>
#include <stdlib.h>
#include <curl/curl.h>
#include <cJSON.h>
// 用于libcurl的写回调函数,将响应数据写入到一个字符串中
static size_t write_callback(void *contents, size_t size, size_t nmemb, void *userp) {
size_t realsize = size * nmemb;
struct string *mem = (struct string *)userp;
char *ptr = realloc(mem->ptr, mem->size + realsize + 1);
if(ptr == NULL) {
// 内存分配失败
printf("not enough memory (realloc returned NULL)\n");
return 0;
}
mem->ptr = ptr;
memcpy(&(mem->ptr[mem->size]), contents, realsize);
mem->size += realsize;
mem->ptr[mem->size] = 0;
return realsize;
}
int main(void) {
CURL *curl;
CURLcode res;
struct string s;
s.ptr = malloc(1); // 初始化字符串
if(s.ptr == NULL) {
perror("malloc");
return 1;
}
s.size = 0; // 不要忘记初始化大小
curl_global_init(CURL_GLOBAL_ALL);
curl = curl_easy_init();
if(curl) {
// 设置目标URL
curl_easy_setopt(curl, CURLOPT_URL, "http://api.example.com/data");
// 设置写回调函数
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
// 设置写回调函数的用户数据
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&s);
// 执行HTTP请求
res = curl_easy_perform(curl);
// 检查错误
if(res != CURLE_OK) {
fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
} else {
// 输出响应数据
printf("%s\n", s.ptr);
// 使用cJSON解析JSON数据
cJSON *json = cJSON_Parse(s.ptr);
if(json == NULL) {
fprintf(stderr, "JSON parse error: %s\n", cJSON_GetErrorPtr());
} else {
// 解析JSON数据并输出
// 这里需要根据实际的JSON结构来解析数据
// 例如:cJSON *name = cJSON_GetObjectItem(json, "name");
// printf("Name: %s\n", name->valuestring);
cJSON_Delete(json); // 解析完成后释放JSON对象
}
}
// 清理
curl_easy_cleanup(curl);
}
free(s.ptr); // 释放字符串内存
curl_global_cleanup();
return 0;
}
在这个示例中,我们首先定义了一个write_callback
函数,它会在libcurl接收到数据时被调用。我们使用curl_easy_setopt
函数设置了目标URL和写回调函数。然后,我们执行HTTP请求并检查是否有错误发生。如果一切正常,我们使用cJSON库解析接收到的JSON数据。
请注意,你需要根据实际的API和JSON响应格式来调整解析JSON数据的代码。此外,确保在编译时链接了libcurl和cJSON库。例如,如果你使用gcc编译器,可以使用以下命令:
gcc -o http_request http_request.c -lcurl -lcjson
确保你的系统中已经安装了libcurl和cJSON库,并且在编译时正确地链接了这些库。
标签:cJSON,利用,JSON,API,easy,服务器,curl,ptr,size
From: https://www.cnblogs.com/ZGLi/p/18242817