隨著互聯網技術的普及和深入,越來越多的應用程序需要通過網絡來傳遞數據。特別是在移動互聯網時代,使用https json傳輸數據已經成為了很多應用程序的標準實現方式。而c語言作為一種基礎語言,同樣也可以很方便地調用https json接口。
#include <stdio.h> #include <stdlib.h> #include <curl/curl.h> #include <jansson.h> static size_t write_callback(char *ptr, size_t size, size_t nmemb, void *userdata) { size_t realsize = size * nmemb; *((char *) userdata) = ptr[0]; return realsize; } int main() { CURL *curl; CURLcode res; char url[] = "https://api.github.com/users/octocat"; char response[1024]; json_t *root; json_error_t error; curl_global_init(CURL_GLOBAL_DEFAULT); curl = curl_easy_init(); if (curl) { curl_easy_setopt(curl, CURLOPT_URL, url); curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L); curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *) response); res = curl_easy_perform(curl); if (res != CURLE_OK) { fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); } else { root = json_loads(response, 0, &error); if (!root) { fprintf(stderr, "json_loads() failed: %s\n", error.text); return EXIT_FAILURE; } printf("name: %s\n", json_string_value(json_object_get(root, "name"))); printf("company: %s\n", json_string_value(json_object_get(root, "company"))); printf("location: %s\n", json_string_value(json_object_get(root, "location"))); json_decref(root); } curl_easy_cleanup(curl); } curl_global_cleanup(); return EXIT_SUCCESS; }
在上述示例代碼中,我們首先通過curl_easy_init()函數初始化一個CURL對象,并設置CURLOPT_URL參數指向需要訪問的https json接口。同時由于大部分https json接口需要證書的驗證,我們需要通過CURLOPT_SSL_VERIFYPEER和CURLOPT_SSL_VERIFYHOST參數設置為0L來關閉證書驗證。接下來我們需要設置CURLOPT_WRITEFUNCTION來回調一個函數用于接收接口返回的數據,并將該函數的返回結果寫入CURLOPT_WRITEDATA參數中指定的response數組中。然后通過curl_easy_perform()函數發起網絡請求,將response數組中的內容轉換為json格式,方便我們進行數據解析。最后我們通過調用json_object_get函數,根據json中的鍵獲取對應的值,并輸出到控制臺上。