在使用C語言進行網絡編程時,我們通常需要使用HTTP協議進行數據傳輸。其中,發送JSON數據也是非常常見的操作。本文將介紹C語言如何發送JSON數據。
首先,我們需要使用socket庫建立與服務器的連接。然后發送HTTP請求。在發送JSON數據之前,我們需要設置請求頭部,指定數據的類型、長度等相關信息。
char *json = "{\"name\":\"Tom\", \"age\":20}"; char *host = "example.com"; char *path = "/api/user"; char *content_type = "Content-Type: application/json\r\n"; char *content_length = "Content-Length: "; char length[10]; int sockfd; struct sockaddr_in servaddr; sockfd = socket(AF_INET, SOCK_STREAM, 0); bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(80); inet_pton(AF_INET, host, &servaddr.sin_addr); connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)); // 發送HTTP請求 char request[500]; sprintf(request, "POST %s HTTP/1.1\r\nHost:%s\r\n%s%s%d\r\n\r\n%s", path, host, content_type, content_length, (int)strlen(json), json); write(sockfd, request, strlen(request));
以上代碼實現了與服務器建立連接,并發送了POST請求。其中,Content-Type指定了數據的類型為JSON,Content-Length指定了數據的長度。
接下來,我們需要等待服務器的響應。服務器響應后,我們可以讀取響應頭部并解析響應狀態碼。如果狀態碼表明請求成功,那么我們可以讀取響應體中的數據。
char recvline[4096]; int n; while ((n = read(sockfd, recvline, 4096)) >0) { if (strstr(recvline, "\r\n\r\n")) { break; } } // 解析響應頭部 char *body = strstr(recvline, "\r\n\r\n") + 4; int body_len = n - (body - recvline); if (strstr(recvline, "200 OK")) { printf("Server returned: %.*s\n", body_len, body); } else { printf("Server returned an error\n"); } close(sockfd);
以上代碼實現了讀取服務器響應,并解析響應頭部。如果服務器響應狀態碼為200,則說明請求成功并打印響應體中的內容。
總的來說,C語言發送JSON數據的過程就是建立連接、發送HTTP請求、等待服務器響應并解析響應頭部的流程。我們只需要設置好請求頭部、請求體中的JSON數據格式以及解析響應數據即可完成該操作。