What :C語言 如何用post方式 上傳json數據.
Piont:C語言Socket實現HTTP協議,json格式數據組包。
1,C語言Socket實現HTTP POST+json格式數據
按照HTTP協議發送request。
http POST 報文格式
http 報文是面向文本的。
報文分為:請求報文和響應報文
請求報文由:請求行,請求頭部,空行和請求數據四個部分組成。
POST:當客戶端給服務器提供信息較多時可以使用POST方法,POST方法將請求參數
封裝在HTTP請求數據中,以名稱/值的形式出現,可以傳輸大量數據,可用來傳送文件。
請求頭部:
由關鍵字/值對組成,每行一對,用:分隔,請求頭部通知服務器有關於客戶端請求的信息
典型的請求頭有:
User-Agent,Accept,Host.
空行
最后一個請求頭之后是一個空行,發送回車符和換行符,通知服務器以下不再有請求頭。
對於一個完成的Http請求來說,空行是必須的,否則服務器會認為本次請求的數據尚未完全發送到服務器,處於等待狀態。
請求數據:
POST方法適用於需要客戶填寫表單的場合,與請求數據相關的最常用的請求頭是
content-Type和Content-Length;
cJSON庫(構建json與解析json字符串)-c語言
二、cJSON庫之組包
1、json的數據結構
c語言中json數據是采用鏈表存儲的
typedef struct cJSON {
struct cJSON *next,*prev;// 數組 對象數據中用到
struct cJSON *child;// 數組 和對象中指向子數組對象或值
int type;// 元素的類型,如是對象還是數組
char *valuestring;// 如果是字符串
int valueint; // 如果是數值
double valuedouble;// 如果類型是cJSON_Number
char *string;// The item’s name string, if this item is the child of, or is in the list of subitems of an object.
} cJSON;
三、cJSON使用
{
“name”: “Jack (\”Bee\”) Nimble”,
“format”: {
“type”: “rect”,
“width”: 1920,
“height”: 1080,
“interlace”: false,
“frame rate”: 24
}
}
“name”: “Jack (\”Bee\”) Nimble”,
“format”: {
“type”: “rect”,
“width”: 1920,
“height”: 1080,
“interlace”: false,
“frame rate”: 24
}
}
1、字符串解析成json結構體
1):講字符串解析成json結構體。
cJSON *root = cJSON_Parse(my_json_string);
2):獲取某個元素
cJSON *format = cJSON_GetObjectItem(root,”format”);
int framerate = cJSON_GetObjectItem(format,”frame rate”)->valueint;
int framerate = cJSON_GetObjectItem(format,”frame rate”)->valueint;
3):講json結構體轉換成字符串
char *rendered=cJSON_Print(root);
4):刪除
cJSON_Delete(root);
2:構建一個json結構體
cJSON *root,*fmt;
root=cJSON_CreateObject();
cJSON_AddItemToObject(root, “name”, cJSON_CreateString(“Jack (\”Bee\”) Nimble”));
cJSON_AddItemToObject(root, “format”, fmt=cJSON_CreateObject());
cJSON_AddStringToObject(fmt,”type”, “rect”);
cJSON_AddNumberToObject(fmt,”width”, 1920);
cJSON_AddNumberToObject(fmt,”height”, 1080);
cJSON_AddFalseToObject (fmt,”interlace”);
cJSON_AddNumberToObject(fmt,”frame rate”, 24)
out =cJSON_Print(root);
printf(“%s\n”,out);
cJSON_Delete(root);
free(out);
“`
POST ,json數據實現:
C語言 http socket 編程
1,用C語言http socket 編程以post步驟傳輸數據的實質和實現方法
需首先實現:寫一個關於http協議的socket編程基礎函數庫
HTTP報文段是這么寫的:
POST URL HTTP/1.1\r\n
若干HTTP選項\r\n
\r\n
POST數據段(以\r\n分隔)
http報文頭:
char *header = “POST / HTTP/1.1\n”
“Host: 192.168.9.20:8080\n”
“Content-Length: 62\n\n”
“AuthenticateUser=UserID&AuthenticatePassword=PWD&Submit=\n”;
不論pos還是get的實質就是一段數據,這些數據你可以用抓包方式獲取,還可以使用源代碼的服務器自己測試得到
pos還是get的實質就是一段數據,這些數據你可以用抓包方式獲取,還可以使用源代碼的服務器自己測試得到
總之以上就是屬於http協議的部分,因為http是基於tcp的,所以你用c完全可以寫一個socket的tcp,然后用tcp再
封裝成http的即可
所有的數據都寫完后,在該Socket上進行響應報文的接收。最后解析一下響應報文,檢查響應狀態就可以了。
C語言實現HTTP POST數據
---------------------
作者:Lolwuj
來源:CSDN
原文:https://blog.csdn.net/mikewu_helloworld/article/details/52781675
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!