在C語(yǔ)言中,發(fā)送JSON格式請(qǐng)求是一項(xiàng)非常常見(jiàn)的任務(wù)。JSON是一種輕量級(jí)的數(shù)據(jù)交換格式,因此在與RESTful API進(jìn)行交互時(shí),通常使用JSON格式來(lái)傳遞數(shù)據(jù)。以下是使用C語(yǔ)言發(fā)送JSON格式請(qǐng)求的基本示例:
#include <stdio.h> #include <stdlib.h> #include <curl/curl.h> int main(void) { CURL *curl; CURLcode res; curl = curl_easy_init(); if (curl) { // 定義請(qǐng)求頭和JSON數(shù)據(jù) struct curl_slist *headers = NULL; headers = curl_slist_append(headers, "Content-Type:application/json"); headers = curl_slist_append(headers, "charsets:utf-8"); const char *json_data = "{\"name\":\"Test\",\"age\":25,\"email\":\"test@test.com\"}"; // 設(shè)置請(qǐng)求方法和URL curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/api/test"); curl_easy_setopt(curl, CURLOPT_POST, 1); // 設(shè)置請(qǐng)求頭和JSON數(shù)據(jù) curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, json_data); // 執(zhí)行請(qǐng)求 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); curl_slist_free_all(headers); } return 0; }
在上述代碼中,我們使用CURL庫(kù)進(jìn)行HTTP請(qǐng)求。我們首先初始化一個(gè)CURL句柄,然后設(shè)置請(qǐng)求方法/URL以及請(qǐng)求體。然后發(fā)送請(qǐng)求并接收響應(yīng)。
在設(shè)置請(qǐng)求頭時(shí),我們需要設(shè)置Content-Type和charsets。這確保了服務(wù)器可以正確解釋我們發(fā)送的JSON數(shù)據(jù)。
通過(guò)設(shè)置CURLOPT_POST為1,我們可以將請(qǐng)求方法設(shè)置為POST。這意味著我們將向服務(wù)器發(fā)送數(shù)據(jù)。使用CURLOPT_POSTFIELDS選項(xiàng)可以設(shè)置發(fā)送的JSON數(shù)據(jù)。
最后,我們使用curl_easy_perform()函數(shù)執(zhí)行請(qǐng)求。如果請(qǐng)求返回一個(gè)錯(cuò)誤代碼,我們可以使用curl_easy_strerror()函數(shù)獲得錯(cuò)誤消息。
在最后,我們清理了CURL實(shí)例并釋放了請(qǐng)求頭對(duì)象的所有內(nèi)存。