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数据的更多相关文章

  1. C# HTTP系列13 以form-data方式上传多个文件以及键值对集合到远程服务器

    系列目录     [已更新最新开发文章,点击查看详细] 类似于以下场景,将表单中的用户信息(包含附件)上传到服务器并保存到数据库中, <form id="form1" run ...

  2. Ajax方式上传文件

    用到两个对象 第一个对象:FormData 第二个对象:XMLHttpRequest 目前新版的Firefox 与 Chrome 等支持HTML5的浏览器完美的支持这两个对象,但IE9尚未支持 For ...

  3. &lt;源代码&gt;FTPclient追加方式上传自己定义信息

    实现功能:向FTPserver以追加方式上传自己定义信息(例程中为:2014-10-08 13:47:15 test.) 源代码下载(免积分):http://download.csdn.net/det ...

  4. 【代码笔记】iOS-向服务器传JSON数据的两种方式

    一,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. ...

  5. 通过Ajax方式上传文件,使用FormData进行Ajax请求

    通过传统的form表单提交的方式上传文件: <form id= "uploadForm" action= "http://localhost:8080/cfJAX_ ...

  6. Android必知必会-使用okhttp的PUT方式上传文件

    注:如果移动端排版有问题,请看 简书版 (<-点击左边),希望CSDN能更好的支持移动端. 背景 公司的文件上传接口使用PUT协议,之前一直用的都是老项目中的上传类,现在项目中使用了okhttp ...

  7. koa2:通过Ajax方式上传文件,使用FormData进行Ajax请求

    koa2通过表单上传的网上很多,但通过Ajax方式上传文件,使用FormData进行Ajax请求,不好找. 参考了这个用base64上传图片的例子.https://github.com/Yuki-Mi ...

  8. 前端 - jquery方式 / iframe +form 方式 上传文件

    环境与上一章一样 jquery 方式上传文件: HTML代码 {#html代码开始#} <input type="file" id="img" > ...

  9. [转] 通过Ajax方式上传文件,使用FormData进行Ajax请求

    通过传统的form表单提交的方式上传文件: <form id= "uploadForm" action= "http://localhost:8080/cfJAX_ ...

随机推荐

  1. day14带参装饰器,迭代器,可迭代对象 , 迭代器对象 ,for迭代器 , 枚举对象

    复习 ''' 函数的嵌套定义:在函数内部定义另一个函数 闭包:被嵌套的函数 -- 1.外层通过形参给内层函数传参 -- 2.验证执行 开放封闭原则: 功能可以拓展,但源代码与调用方式都不可以改变 装饰 ...

  2. android开发_view和view属性

    一.view视图的宽度和高度属性,属性值:固定和浮动两种状态 1属性为固定值 <View android:layout_width="30dp" android:layout ...

  3. Android系统分析之运营商显示流程分析之运营商信息的读取流程二

    运营商显示流程分析之运营商信息的读取流程 一. SIM卡运营商信息的读取 从前面的 运营商信息的获取和赋值 可以知道SIM卡运营商的赋值最终是在 SIMRecords 中完成的, 而SIM卡信息的相关 ...

  4. Redis集群(主从模式)

    主从模型   在Redis的集群当中,每个节点(实例)都有一个身份:Master或者Slave,Master:主要负责数据写入,Slave一般提供数据读取,Master与Slave之间是一对多关系,M ...

  5. Python打开新世界的大门-入门篇1

    目录 题记 Python技巧.避坑及心得 八种数据类型 循环 函数 Homework 题外话 之前没有写博客的习惯,现在开始写觉得入门也太晚了吧,看看同龄的大哥都写了十几万字.于是 ...

  6. 【搬运工】linux下创建用户(一)

    转载:http://www.cnblogs.com/ylan2009/articles/2321177.html linux下创建用户(一) Linux 系统是一个多用户多任务的分时操作系统,任何一个 ...

  7. 类中为什么要定义__init__()方法

    总结一下, 加上__init__()方法后,类才可以实例化,不加类就是个空壳,相当于一个方法集合 学习Python的类,一直不太理解为什么一定要定义init()方法,现在简要谈一下自己的理解吧. 1. ...

  8. Vue小项目二手书商城:(一)准备工作、组件和路由

    本项目基于vue2.5.2,与低版本部分不同之处会在(五)参考资料中提出 完整程序:https://github.com/M-M-Monica/bukesi 实现内容: 资源准备(mock数据) 组件 ...

  9. The threat to world

    The threat to world 对世界贸易的威胁"> The rules-based system is in grave(严重的) danger 基于规则的体系岌岌可危 DO ...

  10. 谈谈传统BIO网络编程模型的局限性与NIO

    先来看看我们的server端: 创建一个serversocket,进行监听,每来一个客户端,就启动一个新启动为其服务: private void createListenSocket() { //如果 ...