在C語言中,發送POST請求并獲取JSON響應是一種基本操作。這種操作經常被用在Web開發過程中,因為很多Web服務API都需要POST請求,而且響應也經常以JSON格式返回。那么,我們該如何實現這個操作呢?
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <curl/curl.h> // 用于處理響應結果的回調函數 size_t write_callback(char *ptr, size_t size, size_t nmemb, void *userdata) { size_t realsize = size * nmemb; char *resp = (char *)userdata; memcpy(resp, ptr, realsize); return realsize; } int main() { CURL *curl; CURLcode res; char *resp; long resp_code; char *postdata = "foo=bar&baz=qux"; char *url = "http://example.com/api"; // 初始化curl curl = curl_easy_init(); if (!curl) { fprintf(stderr, "curl_easy_init() failed\n"); return 1; } // 設置請求頭 struct curl_slist *headers = NULL; headers = curl_slist_append(headers, "Content-Type: application/x-www-form-urlencoded"); // 設置請求選項 curl_easy_setopt(curl, CURLOPT_URL, url); curl_easy_setopt(curl, CURLOPT_POST, 1L); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postdata); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); // 設置響應處理函數 resp = (char *)malloc(1024 * sizeof(char)); memset(resp, 0, 1024 * sizeof(char)); curl_easy_setopt(curl, CURLOPT_WRITEDATA, resp); 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); free(resp); return 1; } // 獲取響應碼 curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &resp_code); printf("Response code: %ld\n", resp_code); // 打印響應結果 printf("Response body:\n%s\n", resp); // 清理curl curl_easy_cleanup(curl); free(resp); return 0; }
上述代碼演示了如何發送POST請求,并獲取服務端以JSON格式返回的響應。需要注意的是,這里使用了CURL庫來發送HTTP請求并處理響應結果。通過設置請求選項,我們可以很方便地指定請求URL、請求方法、請求頭、請求參數等信息。同時,通過設置寫入回調函數,我們可以很方便地獲取服務器返回的響應數據。