嵌入式设备进行http socket开发流程
最近接触了一个http开发的项目,在这里记录一下主要流程。
下位机:arm linux
上位机:pc web服务器
这里在与web服务器通信时,没有使用第三方开源库工具,而是直接使用socket通信模拟http协议通信,大致思路如下:
1 、对域名解析,将www.xxxx.com之类的网址解析为ip地址,端口没有说明的话,默认80
2、使用socket链接指定ip和端口
3、模拟http协议格式发送数据,和接收数据处理
这里最为繁琐的是第三步调试,http是一个纯文本协议,需要注意对空格、换行符等不可见字符特别注意。为了安全起见,这里推荐两个工具,用于调试http协议和分析http原始数据(wireshark抓包软件,和firefox浏览器的httprequest插件),这两个工具很实用。这里wireshark抓包软件,只要是接触网络的同事都知道,我就不说了,http request插件给大家一个切图:
http trap上传文件调试:
http trap 文件上传基本格式:
POST /upload_file/UploadFile HTTP/1.1
Accept: text/plain, */*
Accept-Language: zh-cn
Host: 192.168.29.65:80
Content-Type:multipart/form-data;boundary=---------------------------7d33a816d302b6
User-Agent: Mozilla/4.0 (compatible; OpenOffice.org)
Content-Length: 424
Connection: Keep-Alive
-----------------------------7d33a816d302b6
消息1-----------------------------7d33a816d302b6
消息2-----------------------------7d33a816d302b6
消息3-----------------------------7d33a816d302b6--
同样先找合适的调试工具,这里以linux 端的curl指令,结合实际的项目为例:
# curl -F 'param={"category":18,"lng":"113.365336","lat":"23.105214","safecode":"A16F0D4D5FC085B4","sspusernum":"356869075000328","type":1,"data_type":1,"gather_time":"2017-05-02 15:44:38","clientid":"20170502154438","car_num":"鄂A5536","region_id":"430102"}' -F 'picture1=@/mnt/hgfs/share/cifs/1.jpg' -F 'video1=@/mnt/hgfs/share/cifs/1.mp4' http://mtest.yitopapp.com/ssposs-service/yitopssp/saveoffertwoother
同时使用wireshark 抓包获取数据包格式,然后按照该格式模仿数据发送。
在模仿数据格式时,我这里需要特别提醒一处,我就这这里被坑。
这里图片是post消息指令,和大家需要说明的boundary在这里是声明,假设boundary赋值为x
这里有两处boundary属于使用,前面boundary声明假设boundary赋值为x,使用时的表达式:--x,一定要记住使用时比声明多了两个--符号,我就是大意没有发现这个,调试了好久
这里有一个boundary,这里表示结束。前面boundary声明假设boundary赋值为x,结束时的表达式:--x--