在C語言中,提交JSON格式的數(shù)據(jù)是一種常見的需求。這可以通過使用HTTP協(xié)議來實(shí)現(xiàn)。HTTP協(xié)議是一種基于文本的協(xié)議,因此可以使用C語言中的一些標(biāo)準(zhǔn)庫來處理HTTP請求和響應(yīng)。
要發(fā)送HTTP請求,需要使用Socket套接字來連接服務(wù)器。使用C語言的Socket API可以創(chuàng)建一個Socket,并通過connect()函數(shù)連接到服務(wù)器。一旦連接,就可以使用send()函數(shù)來發(fā)送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”應(yīng)該被替換為具體的服務(wù)器地址。在send()函數(shù)中,我們構(gòu)造了一個HTTP POST請求,其格式如下:
- POST /api HTTP/1.1 表示是一個POST請求,請求路徑為/api
- Host: www.example.com 表示請求的主機(jī)地址
- Content-Type: application/json 表示請求體的數(shù)據(jù)類型為application/json
- Content-Length: %d 表示請求體的數(shù)據(jù)長度,需要動態(tài)計算
- 請求體JSON數(shù)據(jù):{\"key\":\"value\"} 表示具體的請求體,可以根據(jù)實(shí)際情況來設(shè)置
讀取服務(wù)器響應(yīng)可以使用read()函數(shù)。在上面的例子中,我們讀取了255個字節(jié)的響應(yīng)數(shù)據(jù),并輸出在控制臺上。當(dāng)然,具體應(yīng)該根據(jù)實(shí)際情況進(jìn)行處理。