當(dāng)我們需要將多個(gè)JSON對(duì)象封裝為一個(gè)數(shù)組進(jìn)行POST請(qǐng)求時(shí),就需要用到C語(yǔ)言的POST請(qǐng)求處理方法。
//需要發(fā)送的JSON對(duì)象數(shù)組 char *car_list[2] = { "{ \"brand\": \"Tesla\", \"model\": \"Model S\", \"year\": 2022 }", "{ \"brand\": \"Audi\", \"model\": \"A4\", \"year\": 2021 }" }; //計(jì)算并設(shè)置JSON對(duì)象數(shù)組的大小 int content_length = strlen(car_list[0]) + strlen(car_list[1]) + 4; char content_length_str[16]; sprintf(content_length_str, "%d", content_length); //創(chuàng)建POST請(qǐng)求對(duì)象 CURL *curl = curl_easy_init(); if (curl) { //設(shè)置POST請(qǐng)求URL curl_easy_setopt(curl, CURLOPT_URL, "http://api.example.com/cars"); //設(shè)置請(qǐng)求參數(shù) curl_easy_setopt(curl, CURLOPT_POST, 1L); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, car_list); curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, content_length); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); curl_easy_setopt(curl, CURLOPT_USERAGENT, "libcurl-agent/1.0"); curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L); //執(zhí)行POST請(qǐng)求 CURLcode res = curl_easy_perform(curl); //釋放資源 curl_easy_cleanup(curl); }
上述代碼中,我們首先定義了一個(gè)JSON對(duì)象數(shù)組,包括兩個(gè)對(duì)象,每個(gè)對(duì)象有三個(gè)屬性,分別是brand,model和year。接著,我們計(jì)算并設(shè)置了JSON對(duì)象數(shù)組的大小,并創(chuàng)建了一個(gè)POST請(qǐng)求對(duì)象。
在設(shè)置請(qǐng)求參數(shù)時(shí),我們先設(shè)置了POST請(qǐng)求的URL,然后設(shè)置了請(qǐng)求類型為POST,設(shè)置了請(qǐng)求參數(shù)為JSON對(duì)象數(shù)組,指定了JSON對(duì)象數(shù)組的大小,設(shè)置了請(qǐng)求頭信息,包括請(qǐng)求的User-Agent等,并設(shè)置了VERBOSE選項(xiàng)用于調(diào)試和查看請(qǐng)求詳情。
最后,我們執(zhí)行了POST請(qǐng)求,獲取返回結(jié)果。當(dāng)然,在執(zhí)行完請(qǐng)求之后,我們需要及時(shí)釋放資源(釋放CURL對(duì)象,關(guān)閉curl_easy_init()等)。