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
版权声明:本文为博主原创文章,转载请附上博文链接!