C語言 用http post方式 上傳json數據流程參考

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;json

cJSON庫(構建json與解析json字符串)-c語言數組

2、cJSON庫之組包服務器

一、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;socket

3、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
}
}tcp

一、字符串解析成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;post

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上進行響應報文的接收。最後解析一下響應報文,檢查響應狀態就能夠了。

相關文章
相關標籤/搜索