1.Http简介

HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写。它的发展是万维网协会(World Wide Web Consortium)和Internet工作小组IETF(Internet Engineering Task Force)合作的结果,(他们)最终发布了一系列的RFC,RFC 1945定义了HTTP/1.0版本。其中最著名的就是RFC 2616。RFC 2616定义了今天普遍使用的一个版本——HTTP 1.1。
HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。
HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议
一般的,http运行于TCP/IP协议之上,默认端口为80


运行流程

HTTP工作过程可分为四步:
1)首先客户机与服务器需要建立连接。
2)建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
3)服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
4)客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。
如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。

一般的,嵌入式设备很少用http和https通信,很大方面受限于RAM。更多采用TCP/IP、CoAP、MQTT、UDP…等轻量化协议进行通信,本次记录一下在RV3 4G模块下的http通信。

2.代码分析

老样子,直接上代码吧

T_HTTPSND_STATE slim_http_handler(char *URL, char *msg, uint16_t msg_len){sdk_uart_printf("\n++++++++++++++++++++ HTTP handler ++++++++++++++++++++\n");struct http_client *client = NULL;struct http_data_s *client_data = NULL;struct http_client_list * header = NULL;int resp_code = 0;T_HTTPSND_STATE sta = HTTPSND_OK;uint16_t i = 0;/* 申请内存空间 */client_data = malloc(sizeof(*client_data));if(!client_data){sdk_uart_printf("malloc failed\n");free(client_data);return HTTPSND_MEMORY_FAILED;}memset(client_data, 0, sizeof(*client_data));/*初始化客户端*/client = http_client_init();if(!client){sdk_uart_printf("client failed\n");free(client_data);http_client_shutdown(client);return HTTPSND_CLIENT_FAILED;}http_client_setopt(client, HTTPCLIENT_OPT_URL, URL);//http服务器地址http_client_setopt(client, HTTPCLIENT_OPT_RESPONSECB, _response_cb); //响应回调http_client_setopt(client, HTTPCLIENT_OPT_RESPONSECB_DATA, client_data);http_client_setopt(client, HTTPCLIENT_OPT_METHOD, HTTPCLIENT_REQUEST_POST); /*设置模式,支持 GET/POST/PUT*/ http_client_setopt(client, HTTPCLIENT_OPT_POSTLENGTH, msg_len);//strlen("data=1234567890")); /*http context length*/http_client_setopt(client, HTTPCLIENT_OPT_POSTDATA, msg);//"data=1234567890");                    /*post data is http context*///添加 HTTP headerheader = http_client_list_append(header, "Content-Type: application/x-www-form-urlencoded\r\n");    //内容为表单数据header = http_client_list_append(header, "Accept: text/html, */* \r\n");    //可接收内容类型header = http_client_list_append(header, "Connection: Keep-Alive\r\n"); //keep alivehttp_client_setopt(client, HTTPCLIENT_OPT_HTTPHEADER, header);  //设置headerhttp_client_perform(client);http_client_getinfo(client, HTTPCLIENT_GETINFO_RESPONSE_CODE, &resp_code);    //获取响应代码sdk_uart_printf("[http_client_test]Get tcp state %d\n", resp_code);if (resp_code >= 200 && resp_code < 300){
#if 0if(client_data->data_sz){sdk_uart_printf("\r\n data_sz=%u, %s", client_data->data_sz,client_data->data);sdk_uart_printf("\r\nresult:");for (i = 0; i < 100; i++){sdk_uart_printf("%02x ",client_data->data[i]);}}
#endif}else if (resp_code == 404) {sdk_uart_printf("response_code == %d\r\n%s",resp_code ,client_data->data);sta = HTTPSND_404_ERROR;}free(client_data);http_client_shutdown(client);sdk_uart_printf("\n-------------------- HTTP handler --------------------\n");return sta;
}
static int _response_cb(char *buffer, int size, int nitems, void *private_data){struct http_data_s *client_data = private_data;sdk_uart_printf("recv data_sz=%u, %s\n",size,buffer);if ((client_data->data_sz + size) < sizeof(client_data->data)) {memcpy(client_data->data + client_data->data_sz, buffer, size);client_data->data_sz += size;return 0;}return -1;
}

3.调试

一方面,自己不是太懂后端,另一方面因为http是承载与TCP方式传输的超文本协议。所以用个网络调试助手应该就可以搞定的咯。

  1. 搭建环境
    4G模块并不能访问内网,但是有没有现成的外网服务器,肿么办呢,那就把内网IP映射到外网中去,用的花生壳哈。

    2.分析数据
    最后根据网络调试助手接收到的http工具发送的数据和4G模块发送的数据进行分析,最后确定为header没有设置正确,添加header的Content-Type为表单类型即可咯

3.大功告成
现在可以将4G POS设备的刷卡数据通过http上传到服务器咯

[物联网]4G模块openCPU通信之http通信相关推荐

  1. arm oe linux gnueabi 系统,【技术分享】Quectel 4G模块Opencpu中实现高通wifi功能

    导语 越来越多的IOT应用场景中需要使用4G模块,而在有些特定的场合需要把4G上网能力转化wifi功能,比如说无人机中视频传输,以及打印机行业中都有类似的应用案例,以便更好的提供给更多的客户端去使用. ...

  2. java通过与4g模块DTU通信控制串口设备PLC解决方案

    项目背景: 最近公司接到一个农业方面的物联网项目,需求是需要采集土壤的各项参数以及根据温度.湿度来控制水肥和大棚卷膜的开关.提供的设备有各种传感器和plc控制类设备,其中一个最为头疼的就是要解决plc ...

  3. DM9051_SPI网卡驱动于EC200T 4G模块有线网口驱动添加指导

    DM9051_SPI网卡驱动于EC200T 4G模块有线网口驱动添加指导 目录 前言-------------------------------------3 应用简介--------------- ...

  4. 4g模块注册上网 移远_通信模组企业 移远通信amp;广和通

    无线通信模组通常长这个样,它是物联网设备中的关键部件. 1. 通信模组介绍无线模组为物联网开发者提供了便利,使开发者可以专注于特定应用领域业务的开发而不用关注通信协议的技术细节.无线通信模组厂商通常会 ...

  5. Linux之4G模块串口通信

    在使用AT指令给4G模块发信息的时候,我们需要借助到Linux中busybox的microcom工具,该工具用来实现与串口之间的通信,那怎么自己实现编程跟4G模块发信息,以及接收信息把想要的信息放入结 ...

  6. 4g模块与51单片机通信

    本文硬件选自忆佰特的4g模块和老陈的上官一号 第一步先使用电脑配置4g模块,配置好后再与51单片机进行接线完成通信,需要提前插入SIM卡,接线如下 通电后模块右下角会亮起红灯,并且右上角四颗lcd灯会 ...

  7. 4g模块与服务器通信 消息头,4g模块和云服务器通信

    4g模块和云服务器通信 内容精选 换一换 通过PostgreSQL客户端连接实例的方式有非SSL连接和SSL连接两种,其中SSL连接通过了加密功能,具有更高的安全性.登录弹性云服务器.创建并登录弹性云 ...

  8. 基于Stm32的4G模块实现内网透传通信(代码后附)

    基于Stm32的4G模块实现内网透传通信 一.内网透传即内网映射,内网IP端口映射外网连接访问过程的实现.内网透传通信实现过程又有以下几种区别: 1)路由器映射.适合自己本地路由有公网IP网络环境,用 ...

  9. STM32+4G模块与服务器通信

    4G模块硬件图 本来采用的sim7600,但是体积太大,于是换了一款,AT指令大同小异,模块送了天线,需要自己准备SIM卡,全网通可用,物联网卡需要考虑卡片绑定. 功能指示图(来自商家文档),标号2接 ...

最新文章

  1. android 之Fragment的详解
  2. 隐式反馈的去噪,模型取得巨大提升
  3. c++ 隐藏进程_Linux 查看进程的动态信息
  4. leetcode436. 寻找右区间(二分法)
  5. PS教程第一课:PS简介
  6. 【2016年第4期】分布式协商:建立稳固分布式 大数据系统的基石
  7. 很火的仿soul交友盲盒1.0全开源源码
  8. ByteBuffer 转 InputStream
  9. mysql单实例和多实例,MySQL单实例、多实例安装_MySQL
  10. mysql 保存时间报错_JPA在MySQL数据库中保存错误的日期
  11. linux内存源码分析 - 内存回收(匿名页反向映射)
  12. 推荐 System Repair Engineer(SREng)2.4.12.806 版本
  13. 关于MySQL中出现相对应引用词报错“ambiguous”的问题
  14. Linux shell脚本检测jar包,挂掉时自动重启服务
  15. Beaglebone Black – 智能家居控制系统 LAS - 插座组装
  16. Html中锚点的使用
  17. element -UI升级,使用el-tabs导致浏览器卡死问题
  18. JS如何区分微信浏览器、QQ浏览器和QQ内置浏览器,解决 ios 无法判断是否为qq浏览器环境的问题。
  19. 紧随大厂脚步入局海外3A,米哈游造出下一个“原神”难?
  20. 华为面试100题:java开发工程师(中)

热门文章

  1. 宏油庄冒--菜川式快餐和小吃的完美结合
  2. mac连不上wi-fi_如何在Mac上确定Wi-Fi网络的优先级
  3. (策略)盈利收益率法挑选指数基金(ETF)
  4. 量化投资学习——Dealing with the Inventory Risk A solution to the market making problem
  5. 造车新势力上海车展赶考:交出光鲜答卷仍面临生死大限
  6. 如何推导MMSE检测公式?
  7. ISL-Chap12.1笔记
  8. ZigBee join rejoin leave procedure
  9. 写一篇给自己1024的文章
  10. 从校园到职场 - 技能与职位