在C語言中,提交JSON格式的數據是一種常見的需求。這可以通過使用HTTP協議來實現。HTTP協議是一種基于文本的協議,因此可以使用C語言中的一些標準庫來處理HTTP請求和響應。
要發送HTTP請求,需要使用Socket套接字來連接服務器。使用C語言的Socket API可以創建一個Socket,并通過connect()函數連接到服務器。一旦連接,就可以使用send()函數來發送HTTP請求。
int sockfd, portno, n; struct sockaddr_in serv_addr; struct hostent *server; char buffer[256]; portno = 80; sockfd = socket(AF_INET, SOCK_STREAM, 0); server = gethostbyname("www.example.com"); bzero((char *) &serv_addr, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; bcopy((char *)server->h_addr, (char *)&serv_addr.sin_addr.s_addr, server->h_length); serv_addr.sin_port = htons(portno); connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)); sprintf(buffer, "POST /api HTTP/1.1\nHost: www.example.com\nContent-Type: application/json\nContent-Length: %d\n\n{\"key\":\"value\"}", strlen("{\"key\":\"value\"}")); n = write(sockfd,buffer,strlen(buffer)); bzero(buffer,256); n = read(sockfd,buffer,255); printf("%s\n",buffer);
上面代碼中,“www.example.com”應該被替換為具體的服務器地址。在send()函數中,我們構造了一個HTTP POST請求,其格式如下:
- POST /api HTTP/1.1 表示是一個POST請求,請求路徑為/api
- Host: www.example.com 表示請求的主機地址
- Content-Type: application/json 表示請求體的數據類型為application/json
- Content-Length: %d 表示請求體的數據長度,需要動態計算
- 請求體JSON數據:{\"key\":\"value\"} 表示具體的請求體,可以根據實際情況來設置
讀取服務器響應可以使用read()函數。在上面的例子中,我們讀取了255個字節的響應數據,并輸出在控制臺上。當然,具體應該根據實際情況進行處理。