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上进行响应报文的接收。最后解析一下响应报文,检查响应状态就能够了。

相关文章
相关标签/搜索