C语言采用socket实现http post方式上传json数据
1.按照HTTP协议发送请求:
http POST 报文格式
http 报文是面向文本的。
报文分为:请求报文和响应报文
请求报文由:请求行,请求头部,空行和请求数据四个部分组成。
<1.请求行>POST:当客户端给服务器提供信息较多时可以使用POST方法,POST方法将请求参数封装在HTTP请求数据中,以名称/值的形式出现,可以传输大量数据,可用来传送文件。
<2.请求头部>:
由关键字/值对组成,每行一对,用:分隔,请求头部通知服务器有关于客户端请求的信息
典型的请求头有: User-Agent,Accept,Host,content-Type,Content-Length;.
<3.空行> :
最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头。 对于一个完成的Http请求来说,空行是必须的,否则服务器会认为本次请求的数据尚未完全发送到服务器,处于等待状态。
<4.请求数据> :
POST方法适用于需要客户填写表单的场合,与请求数据相关的最常用的请求头是content-Type和Content-Length;
例子:
POST URL HTTP/1.1\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”;
2.需求:
设备端触发事件,推送消息API
/icp/mesger.html?did=xx&dname=xx&dsname=xx&etype=xxx
did --->设备id号
dname --->内机名称
dsname --->外机名称
etype --->触发事件的类别
范例:
http://push.iotcare.cn/icp/mesger.html?did=AIOT-000001-DTFBR&dname=别墅1&dsname=大门&etype=0
3.软件实现:
snprintf(tmpBuf, sizeof(tmpBuf), "did=%s&dname=%s&dsname=%s&etype=%d&dsIndex=%d",
pMsgInfo->szId,
pMsgInfo->dname,
pMsgInfo->dsname,
pMsgInfo->eType,
pMsgInfo->dsIndex); snprintf(pOutBuf, sendLen, "POST /icp/mesger.html HTTP/1.1\n" /*<1>.请求行*/
"Host: %s:%d\n" /*<2>.请求头部*/
"Content-Type: application/x-www-form-urlencoded\n"
"Content-Length: %d\r\n"
"\r\n" /*<3>.空行*/
"%s", /*<4>.请求数据*/
pAddr,
PUSH_SERV_PORT,
strlen(tmpBuf),
tmpBuf); printf("send len:%d, cmd:\n%s\n", strlen(pOutBuf), pOutBuf);
4.测试结果:
POST /icp/mesger.html HTTP/1.1
Host: 47.74.191.223:80
Content-Type: application/x-www-form-urlencoded
Content-Length: 59
did=AIOT-000001-DTFBR&dname=RF&dsname=111&etype=5&dsIndex=0
参考文章:https://blog.csdn.net/mikewu_helloworld/article/details/52781675
C语言采用socket实现http post方式上传json数据的更多相关文章
- C# HTTP系列13 以form-data方式上传多个文件以及键值对集合到远程服务器
系列目录 [已更新最新开发文章,点击查看详细] 类似于以下场景,将表单中的用户信息(包含附件)上传到服务器并保存到数据库中, <form id="form1" run ...
- Ajax方式上传文件
用到两个对象 第一个对象:FormData 第二个对象:XMLHttpRequest 目前新版的Firefox 与 Chrome 等支持HTML5的浏览器完美的支持这两个对象,但IE9尚未支持 For ...
- <源代码>FTPclient追加方式上传自己定义信息
实现功能:向FTPserver以追加方式上传自己定义信息(例程中为:2014-10-08 13:47:15 test.) 源代码下载(免积分):http://download.csdn.net/det ...
- 【代码笔记】iOS-向服务器传JSON数据的两种方式
一,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. ...
- 通过Ajax方式上传文件,使用FormData进行Ajax请求
通过传统的form表单提交的方式上传文件: <form id= "uploadForm" action= "http://localhost:8080/cfJAX_ ...
- Android必知必会-使用okhttp的PUT方式上传文件
注:如果移动端排版有问题,请看 简书版 (<-点击左边),希望CSDN能更好的支持移动端. 背景 公司的文件上传接口使用PUT协议,之前一直用的都是老项目中的上传类,现在项目中使用了okhttp ...
- koa2:通过Ajax方式上传文件,使用FormData进行Ajax请求
koa2通过表单上传的网上很多,但通过Ajax方式上传文件,使用FormData进行Ajax请求,不好找. 参考了这个用base64上传图片的例子.https://github.com/Yuki-Mi ...
- 前端 - jquery方式 / iframe +form 方式 上传文件
环境与上一章一样 jquery 方式上传文件: HTML代码 {#html代码开始#} <input type="file" id="img" > ...
- [转] 通过Ajax方式上传文件,使用FormData进行Ajax请求
通过传统的form表单提交的方式上传文件: <form id= "uploadForm" action= "http://localhost:8080/cfJAX_ ...
随机推荐
- day13函数的嵌套定义,global、nonlocal关键字,闭包及闭包的运用场景,装饰器
复习 ''' 1.函数对象:函数名 => 存放的是函数的内存地址 1)函数名 - 找到的是函数的内存地址 2)函数名() - 调用函数 => 函数的返回值 eg:fn()() => ...
- vs编译过程中出的错
如果运行时出现这样的错,关闭正在运行的.exe文件,即可正常运行
- 1、docker容器技术基础入门
Docker和传统虚拟机的区别 参考文章: https://lwn.net/Articles/531114/ 操作中的命名空间详解 https://blog.yadu ...
- gRPC Client Middleware.
中间件想必大家不陌生,今天给大家介绍如何实现中间件以及实现gRPC的客户端中间件. 什么是中间件? https://docs.microsoft.com/zh-cn/aspnet/core/funda ...
- python笔记--异常处理
Python异常处理 常见异常 AttributeError:属性错误,特性引用和赋值失败时会引发属性错误 NameError:试图访问的变量名不存在 SyntaxError:语法错误,代码形式错误 ...
- react项目中页面跳转、刷新及获取网络状态
// 页面跳转 window.location.href = 'http://speedtest.wangxiaotong.com/' // 页面刷新 window.location.reload() ...
- js中的继承总结全( 含new 原理过程 )
1. 借用 new 构造函数继承 原理: 利用 new 的原理, 通过apply,call , bind 改变 this , 只能实现部分方法的继承: MDN对new的描述: new 运算符创建一个 ...
- App 打包
记录一下: 1. applicationIdSuffix 实现不同 ApplicationId 打包,buildTypes 中添加编译后会成功生成加对应后缀的ApplicationId.在 produ ...
- 2018-2019-2 网络对抗技术 20165303 Exp4 恶意代码分析
实践目标 1.1是监控你自己系统的运行状态,看有没有可疑的程序在运行. 1.2是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分析工具尽量使用原生指令或sysinternals,systr ...
- Amazon 刷单的几种方式及安全性?
刷单需要注意的几个点 1.通过关键词,找产品.不要直接通过连接或者ASIN购买,容易被亚马逊监控. 2.添加购物车时最好添加同类产品表现好的三个到购物车,关联同类产品.在页面多浏览一下,多打开几个同类 ...