c語言作為一門常見的編程語言,也常被用于發送http請求并處理json數據。在網絡編程中,發送http請求是非常重要的一環,而json是一種輕量級的數據交換格式,因此c語言支持發送http請求和處理json數據的能力也是很必要的。
發送http請求可以使用c語言的socket編程、curl庫等方式。在使用socket編程時,需要連接服務器并發送http請求。比如以下代碼可以發送一個GET請求,獲取百度的首頁,并將返回的結果打印出來。
#include<stdio.h> #include<sys/socket.h> #include<arpa/inet.h> #include<unistd.h> int main(){ int sock_desc; struct sockaddr_in serv_addr; char msg[] = "GET / HTTP/1.1\r\nHost: www.baidu.com\r\n\r\n"; char buffer[4096]; sock_desc = socket(AF_INET , SOCK_STREAM , 0); if (sock_desc == -1){ printf("could not create socket"); } serv_addr.sin_addr.s_addr = inet_addr("220.181.57.216"); serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons( 80 ); if (connect(sock_desc , (struct sockaddr *)&serv_addr , sizeof(serv_addr))< 0){ puts("connect error"); } if(send(sock_desc, msg, strlen(msg) , 0)< 0){ puts("Send failed"); return 1; } if(recv(sock_desc, buffer, 4096, 0)< 0){ puts("recv failed"); } printf("%s", buffer); close(sock_desc); return 0; }
當我們想要處理返回的數據時,一般會使用json格式的數據。c語言中的處理json數據可以使用第三方庫,比如json-c庫、cJSON庫等等。這里我們以cJSON庫為例。比如以下代碼可以解析一個json格式的字符串,并逐個打印其中的值。
#include <cJSON.h> #include <stdio.h> int main(){ const char* json_string = "{\"name\":\"Tom\",\"age\":22,\"favorites\":[\"reading\",\"music\",\"running\"]}"; cJSON* json = cJSON_Parse(json_string); if (json == NULL){ printf("json格式錯誤\n"); return 1; } printf("name: %s\n", cJSON_GetObjectItem(json, "name")->valuestring); printf("age: %d\n", cJSON_GetObjectItem(json, "age")->valueint); cJSON* favorites_array = cJSON_GetObjectItem(json, "favorites"); printf("favorites:\n"); int favorites_array_size = cJSON_GetArraySize(favorites_array); for (int i = 0; i< favorites_array_size; i++) { printf("%s\n", cJSON_GetArrayItem(favorites_array, i)->valuestring); } cJSON_Delete(json); return 0; }