linux下用GPRS模块发送POST请求

GPRS模块发送POST请求

    相信大家只要是80、90后都知道GPRS是什么吧(啥?不记得了!)记不记得小时候偷偷用手机上网看学(you)习(xi)资料,手机最上面一个大写的’G‘在不停的闪,那个就是GPRS网络,后来又出现了E(EGPRS)、H也就是大家常说的几G网,现在发展到4G网速比当年玩小霸王手机的时候快了......不知多少倍。

    说了这么多废话,那我们到底问什么用这个GPRS通信呢(好像没有说POST请求,不知道的拿本计算机网络面壁去!),那就要说GPRS的优点了:

    1.传输速率相对较低。有人要问了,速率低还是优点?!那要看你用来干嘛了,传个几KB甚至几B的数据包用4G网简直浪费资源!

    2.入网速度快,而且网络覆盖广泛;

    3.资料内容相对较少,学习强度较低,也就是用起来方便。

AT指令

    我的项目用的是SIM900,GPRS模块都是通过向串口发送AT指令来达到各种操作目的的(不知道如何操作串口的请看我的另一篇文章),比如收发短信、接打电话、上网等等,这里只介绍如何建立TCP连接以及发送数据包。

    我这里将所有指令放到了一个指针数组中(注意和数组指针的区别),还有注意每个指令后面要加回车符("\r"),还有各种转意字符:

unsigned char *cmd[] = {
				"AT\r", 				 \     
				"AT+CCID\r", 				\
				"AT+CSQ\r", 				\
				"AT+CGCLASS=\"B\"\r", 				\
				"AT+CGDCONT=1,\"IP\",\"CMNET\"\r", 				\
				"AT+CGATT=1\r", 				\
				"AT+CIPCSGP=1,\"CMNET\"\r", 				\
				"AT+CIPSTART=\"TCP\",\"182.254.244.212\",\"80\"\r", 				\
				"AT+CIPSEND\r", 				\
				"AT+CIPCLOSE\r" 				\
                        };
    发送:AT                        //初始化

    返回:OK

    发送:AT+CCID          //获取SIM卡标识

    返回:7454645646(我乱写的)

                OK

    发送:AT+CSQ           //获取信号强度

    返回:+CSQ:24,99

                OK

    发送:AT+CSCLASS="B"   //选择移动台类别B

                AT+CGDCONT=1,"IP","CMNET"      //设置上下文

                AT+CGATT=1         //附着GPRS业务

                AT+CIPCSGP=1,"CMNET"    //设置为GPRS连接模式

                AT+CIPSTART="TCP","182.254.144.232","80"     //与特定IP地址的特定端口建立TCP连接,由于是发POST请求,所以是80端口

               AT+SEND          //开始发送数据(具体用法后面说)

               AT+CIPCLOSE

AT+SEND

    当我们与IP+端口建立好了TCP连接后,就要开始真正的目的:发送数据了。

    AT+SEND的一种用法是:

    直接AT+SEND,返回的是'>'字符,也就是等待我们向这个缓冲区写入数据,当写完之后,我们要最后写如一个16进制数据0x1A(熟悉文件结构的就能想到这个是EOF文件结束符),注意是以16进制方式!然后就可以等待返回SEND OK了

     另一种用法是:

     AT+SEND=10,这里的10是举例。返回也是'>'字符,不同的是,这个缓冲区写满10个字节时自动发送。也就是说如果我们第一次写入hello!时不够10个,于是等待继续输入,然后我们再写入world?,好了以经超过10个了自动发送,但是你实际发送出去的绝对不是hello!(换行)world?,这个大伙可以自己测试。

发送POST数据包

    为什么我特地详细说了一下AT+SEND指令呢,因为我们要发送的POST数据包中什么空格、回车、换行各种乱,所以我目的是告诉大家一定要注意你要发送的字节数,不然就会像我一样收到了好多错误码返回。

    这是我的数据包(‘*’处是我隐藏的):

unsigned char *post[] = {
				 "POST /rc/*.php/*/* HTTP/1.1\r\n", 				\
			   	 "Host: www.*.cn\r\n", 				\
			       	 "Content-Type: application/x-www-form-urlencoded\r\n", 				\
			   	 "Content-Length: *\r\n\r\n", 				\
				 "*=*&*=*&*=*"  				\
                         };
    大家也可以用别的格式发送数据包,不过最好是在服务器端抓下包,看看是不是我们想要的格式。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值