目录

前言

一、抓包

二、分析数据

1.解码请求主体

2.分析数据

三、生成数据

1.时间数据

2.跑步数据

3.打包封装

四、上传数据

总结


前言

基本思路:抓包获取http包,分析数据格式,生成数据,上传数据


一、抓包

使用Fiddler 对http包进行抓包

获得请求头:

POST http://10.11.246.182:8029/DragonFlyServ/Api/webserver/uploadRunData HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Connection: Keep-Alive
Charset: UTF-8
User-Agent: Dalvik/2.1.0 (Linux; U; Android 11; M2011K2C Build/RKQ1.200928.002)
Host: 10.11.246.182:8029
Accept-Encoding: gzip

二、分析数据

1.解码请求主体

在16进制下可以看到post请求主体部分是乱码,联合请求头可以得知数据进行了gzip压缩。

在python中引入gzip,对数据进行解压。

import gzip
import sys
import jsondef main():f= gzip.open(r'\data','rb')file_content = f.read()print(file_content)f.close()if __name__ == "__main__":sys.exit(int(main() or 0))

2.分析数据

结合jadx分析软件本体,可以得知数据格式如下:

{'begintime':'" + rundata.split(",")[0] + "',
'endtime':'" + rundata.split(",")[1] + "',
'uid':'" + times.split(",")[1] + "',
'schoolno':'" + schoolno + "',
'distance':'" + distance + "',
'speed':'" + speed + "',
'studentno':'" + times.split(",")[0] + "',
'atttype':'" + atttype + "',
'eventno':'" + eventno + "',
'location':'" + location + "',
'pointstatus':'" + pointstatus + "',
'usetime':'" + time + "'}

三、生成数据

1.时间数据

通过引入time可获得当前时间

import time
t = int(time.time())

2.跑步数据

因为数据分析中发现跑步数据以3到4秒为一段分割,结合基本的计算可以得知,每段数据应以10米左右进行分割。因为跑步区域小,可以将经纬度近似于平面坐标系进行分割。

import geopy
from geopy import distanced = distance.distance(loc1, loc2).meters #计算两点间距离
c = d // 10                              #计算分割段数
lats = (lat[1]) - lat[0]) / c            #计算每段增量
lons = (lon[1]) - lon[0]) / c
m = 1
while m < c:latf.append(float(lat[0]) + lats * m )lonf.append(float(lon[0]) + lons * m )m = m + 1

3.打包封装

以上面分析的数据格式进行打包

i = 0
while i < c:line = str(latf[i]) + '0,' + str(lonf[i]) + '0;' + str(tc[i]) + ';null;null;'+str(round(random.uniform(2.5,1.5),1))+';null'gpsd.append(line)i = i + 1
gdata = '@'.join(gpsd)

四、上传数据

通过此前的数据分析和数据生成,我们已经得到了一个data字典,可以通过gzip压缩后使用requests库进行post。

import gzip
import requestsheaders = {"Connection": "Keep-Alive", "Charset": "UTF-8","User-Agent": "Dalvik/2.1.0 (Linux; U; Android 11; M2011K2C Build/RKQ1.200928.002)","Host": "10.11.246.182:8029"}
url = r'http://10.11.246.182:8029/DragonFlyServ/Api/webserver/getRunDataSummary'
f_out = gzip.compress(str(data).encode('utf-8'))
requ = requests.post(url=url, headers=headers, data=f_out)
print(requ.text)

总结

在整个项目中,我花在post上的时间最多,网上post gzip数据多数通过数据流的方式,而在这个项目中数据流不被服务器接受,最后在gzip的说明文档中找到可以直接对二进制进行压缩,通过指定post data 以表单文字的方法进行post,最后的抓包结果表明和手机软件中生成的post请求格式有所不同,猜测是gzip压缩等级不同导致。最后服务器返回正常结果。

飞翔的红蜻蜓(浙理体育)——生成跑步数据并上传相关推荐

  1. Android——浙理体育(飞翔的红蜻蜓)训练记录上传与查询测试DEMO解决方案

    解决方案 package io.shentuzhigang.demo.text;import io.shentuzhigang.demo.http.okhttp3.HttpClient; import ...

  2. Android——浙理体育(飞翔的红蜻蜓)反编译分析

    基本概念 飞翔的红蜻蜓:飞翔的红蜻蜓app是一款由北京知行灵动科技有限公司开发的专门为高校阳光体育开发的手机跑步软件,输入高校阳光体育管理系统的学号和密码就可以开启跑步了,但是一定要注意连接好校内wi ...

  3. canvas生成姓氏头像,上传七牛后传给后端

    canvas生成姓氏头像,上传七牛后传给后端 1.需求:像苹果手机的通讯录一样,如果没有上传头像就读取他的姓氏. 需要前端生成头像后先上传七牛,将拿到的资源id传给后端存到数据库,用于之后的信息读取 ...

  4. canvas java 上传截图_在Vue项目中使用html2canvas生成页面截图并上传

    使用方法 项目中引入 npm install html2canvas html代码 //html代码 js代码 // 引入html2canvas import html2canvas from 'ht ...

  5. php 上传图片并生成缩略图,php 图片上传并生成缩略图代码

    本代码的功能是把你要上传的图片保存到服务器,然后再把当前图重按比例生成一个小的缩略图哦. if($_FILES['image']['size']){ if($_FILES['image']['type ...

  6. php的$_FILES如何生成以及如何与上传文件对象产生联系

    一.前言 写这篇博客的原因是因为,在上传文件的时候,我们都知道要用$_FILES变量来获取上传的内容,但是$_FILES是什么使用开始有值的呢?我们上传的是二进制参数,为什么在后台不能通过$_POST ...

  7. 支付宝生成RSA密钥,上传应用公钥的完整流程

    首先我们去官方下载[密钥生成工具],根据自己的电脑操作系统进行选择下载,我这里以Windows为例! 这里建议大家直接下载放在电脑桌面,不要放在任何文件夹下! 下载该工具后,解压打开文件夹,运行&qu ...

  8. 上传txt生成字典 java_文件上传漏洞fuzz字典生成脚本小工具分享

    前言 学习xss的时候翻阅资料发现了一个文件上传漏洞fuzz字典生成脚本小工具,试了试还不错,分享一下 配置 需要python2环境 使用方法 $ python upload-fuzz-dic-bui ...

  9. 生成Excel文件并上传到阿里云OSS

    代码 @Resourceprivate ExcelUtils excelUtils;@Async("doSomethingExecutor")Future doCreateStoc ...

最新文章

  1. 支付宝 php rsa算法,:PHP支付宝接口RSA验证
  2. js 关于运算顺序的问题
  3. MAC ox下配置mysql
  4. DropDownList设置选定项,设置选择项,最安全的方法
  5. MASA Framework - 整体设计思路
  6. cocos2d-x多分辨率自适配及因此导致的CCListView的bug修复
  7. python为list实现find方法
  8. Windows Phone 7 开发 31 日谈——第13日:位置服务
  9. 《PWM整流器及其控制》读书笔记-第二章-PWM整流器拓扑结构及原理
  10. ShadowGun 的学习笔记 - GodRays
  11. 微信h5界面隐藏分享按钮
  12. 男童跌入水渠被冲出千米 不会游泳女子将其救起
  13. 201771010101 白玛次仁 《2018面向对象程序设计(Java)》第七周学习总结
  14. SAP FI-CO总账科目简析
  15. jQuery_02 快速入门 $作用和方法
  16. 微信生态的优劣,将决定微信电商的未来
  17. Iterator patten 读书笔记
  18. 【超详细】2021最新版Redis安装教程(基于Redis 6.2.x版本)
  19. 鸿蒙OS屏幕适配UI设计图解决方案
  20. 大学计算机基础p83,2011年《大学计算机基础》考试范围

热门文章

  1. 自定义view系列---刮刮乐的实现
  2. kettle在linux下启动报错libwebkitgtk-1.0-0
  3. 液晶屏常见问题_如何解决液晶显示器最常见的问题
  4. 联合概率和条件概率的区别和联系
  5. 6374. 【NOIP2019模拟2019.10.04】结界[生与死的境界]
  6. LeetCode - 500 - 键盘行(keyboard-row)
  7. 算法入门经典例题3-2,例题3-3知识点
  8. 爱普生Epson Stylus Photo R260 打印机驱动
  9. secureCRT 中文破解版
  10. Verilog HDL的简单应用之74ls148功能的实现