在C語言中發送post請求,需要發送json格式的參數時,需要使用http的相關庫,如curl庫或httpclient庫。
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <stdbool.h>#include <curl/curl.h>/** * 定義post請求參數結構體類型 */ struct POST_DATA { char *json; size_t size; }; /** * 定義curl的write_callback回調函數,用于獲取服務器返回的數據 */ static size_t write_callback(char *data, size_t size, size_t nmemb, void *userdata) { size_t realsize = size * nmemb; struct POST_DATA *post_data = (struct POST_DATA *)userdata; post_data->json = (char *)realloc(post_data->json, post_data->size + realsize + 1); if (post_data->json == NULL) { printf("Failed to allocate memory for post data\n"); return 0; } memcpy(post_data->json + post_data->size, data, realsize); post_data->size += realsize; post_data->json[post_data->size] = 0; return realsize; } int main(int argc, char **argv) { // 初始化curl curl_global_init(CURL_GLOBAL_ALL); CURL *curl = curl_easy_init(); if(curl) { // 設置url curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/api/user"); // 設置post請求 curl_easy_setopt(curl, CURLOPT_POST, 1L); // 設置post請求的json格式數據 curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"test\",\"age\":18}"); // 設置回調函數用于獲取服務器返回的數據 struct POST_DATA post_data = {0}; curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &post_data); // 執行請求操作 CURLcode res = curl_easy_perform(curl); if(res != CURLE_OK) { printf("curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); } else { printf("Server response:\n%s\n", post_data.json); } // 釋放資源 free(post_data.json); curl_easy_cleanup(curl); } // 清除curl環境 curl_global_cleanup(); return 0; }
以上為使用curl庫發送post請求的相關代碼,其中我們設置了url、post請求、post請求的參數為json格式數據,以及設置了回調函數來獲取服務器返回的數據。