在C語言開發中,經常會用到HTTP請求。其中GET請求是一種常見的請求方式。有時候會需要帶上JSON格式的參數進行請求。下面,我們來看一下如何實現C語言的GET請求帶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) { char *str = (char*)userdata; strcat(str, ptr); return size * nmemb; } int main() { char *url = "https://example.com/api"; char *json_str = "{\"key1\": \"value1\", \"key2\": \"value2\"}"; char full_url[256]; strcpy(full_url, url); strcat(full_url, "?data="); strcat(full_url, json_str); CURL *curl = curl_easy_init(); if(curl) { CURLcode res; curl_easy_setopt(curl, CURLOPT_URL, full_url); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback); char *str = (char*)calloc(1, sizeof(char)); curl_easy_setopt(curl, CURLOPT_WRITEDATA, str); res = curl_easy_perform(curl); if(res != CURLE_OK) { fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); } else { printf("%s\n", str); } free(str); curl_easy_cleanup(curl); } return 0; }
上述代碼使用了C語言的curl庫來實現HTTP請求。其中:
- 第 7 行到第 11 行是回調函數,在HTTP請求完成后被調用,將返回的數據存儲到 userdata 中;
- 第 15 行到第 18 行是拼接完整的請求地址;
- 第 20 行到第 23 行是初始化 CURL;
- 第 25 行設置請求地址;
- 第 26 行設置回調函數;
- 第 28 行到第 31 行是申請內存空間,用于存儲返回的數據;
- 第 32 行發送請求;
- 第 34 行到第 38 行是處理返回的數據;
- 第 40 行釋放申請的內存空間;
- 第 41 行清理 CURL。
在這個例子中,我們將 JSON 數據拼接到請求地址中,然后通過回調函數將返回的數據存儲到內存中。當然,還有其他的方式將 JSON 數據發送到服務器,如使用 POST 請求并將 JSON 數據放在請求體中。