标准C语言实现json协议,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;

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

版权声明:本文为博主原创文章,转载请附上博文链接!