对高校体育App的研究(三)【终】

未完待续,对高校体育的研究都会在这篇Blog里写完,想到了就会补上来。

接口相关资料和所有程序都在我的码云

在线访问地址:https://www.spencercjh.top:8090/fastrun/

更新 2019年3月10日

对方服务器改了host,代码估计也更了,这个项目已经过时了,但http报文分析的流程是永不过时的。希望能够帮助到大家。

声明

本文谨为对上海微摇网络科技有限公司出品的高校体育(Android App)的接口自动化测试。

鸣谢

感谢CSDN用户@留白大人的BLOG,感谢GITHUB用户@RyuBAI的开源分享和某不愿透露姓名的同学的指导。

摘要

在这里插入图片描述
**对上述接口进行自动化“测试”。输入手机、密码、开始跑步时间、结束跑步时间、距离、性别就能输出上传跑步数据结果。
接口相关资料和所有程序都在我的码云

相关真实Session

我会把每次手动测试的结果放在这里…SAZ用Fidder打开

开始

我的“自动化测试程序”是一个Api,基于Spring Boot 2.X,这里并不会细讲如何搭建部署一个Spring Boot环境(偏题),也不会细讲每一行代码是干嘛的(我觉得我的代码已经挺优美的了,首先完全阿里巴巴Java开发规范:D)

环境

这里直接摘录我一个项目的README

源码

这里看核心源码,有bug的话就会更。

问题

问题1 Header是有区别的

POST saveRunV2的Header和其他2个GET请求的Header是不一样的,多了两个字段。我编码的时候以为是一样的…

问题2 POST请求中不要把body中的data URLEncoder

GET里要把参数URLEncoder才能放上url,POST里可不行……

问题3 如何修改数据包

我的思路是:先把我准备好的数据包转成一个JSONObject A,把其中我需要的、可以重复使用的信息(比如tNode、track、trend,这些数据都只是用来渲染地图用的,不做校验)放入新的、最后要上传的JSONObject B。可能是我对 com.alibaba.fastjson的Api不太熟悉,我总觉得应该有更好的方法。

问题4 localhost与服务器运行时发生不同状况

  1. paramData.setCookie(String.valueOf(cookie.get(0))); 本地不报错 服务端空指针
  2. data.put(DURATION, String.valueOf((DateFormat.getDateTimeInstance().parse(startTime).getTime())-DateFormat.getDateTimeInstance().parse(endTime).getTime() / 1000)); 本地不报错,服务端转换失败

第一个问题可以理解;
第二个问题很难理解,我服务端也是Java8啊,tomcat8.5,怎么会本地远程不一呢???不过也无伤大雅,写死就完事了。

问题5 朋友用杉达的账号测,发现途经点数据异常了

runPage里gpsinfo里的选到点也要放进数据包,不能乱写。将runPage里的gpsinfo全部替换跑步数据里的tNode。服务端会根据学校来校验经过点。

问题6 定时器自动执行

2018年10月15日更新每日定时跑步

import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import spencercjh.top.fastrun.serviceimpl.FastRunServiceImpl;
import spencercjh.top.fastrun.entity.ParamData;

import java.text.SimpleDateFormat;
import java.util.Calendar;

import static spencercjh.top.fastrun.common.constant.CommonConstant.*;

/**
 * @author spencercjh
 */
@Component
@Log4j2
public class FastRunSchedule {

    private final FastRunServiceImpl fastRunServiceImpl;

    @Autowired
    public FastRunSchedule(FastRunServiceImpl fastRunServiceImpl) {
        this.fastRunServiceImpl = fastRunServiceImpl;
    }

    /***
     * 每天早上8点钟执行一次
     */
    @Scheduled(cron = "0 0 8 * * *")
    public void fastRunEveryDay() {
        ParamData paramData = new ParamData();
        try {
            fastRunServiceImpl.login(paramData, MOBILE_VALUE, PASSWORD_VALUE);
            fastRunServiceImpl.runPage(paramData);
            Calendar calendar = Calendar.getInstance();
            calendar.set(Calendar.HOUR_OF_DAY, HOUR_VALUE);
            calendar.set(Calendar.MINUTE, MINUTE_VALUE_1);
            calendar.set(Calendar.SECOND, SECOND_VALUE);
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String startTime = dateFormat.format(calendar.getTime());
            calendar.set(Calendar.MINUTE, MINUTE_VALUE_2);
            String endTime = dateFormat.format(calendar.getTime());
            fastRunServiceImpl.saveRun(paramData, startTime, endTime, DISTANCE, ISGIRL, FREQUENCY, PACE, DURATION_VALUE);
        } catch (Exception | Error e) {
            e.printStackTrace();
            log.error(paramData.getResult());
        }
        log.info(paramData.getResult());
    }
}

问题7 utoken根本不验证

如图所示,我登陆都没成功,竟然就能直接访问runPage这个接口,我真的仏了:
在这里插入图片描述

结果

在线访问地址:https://www.spencercjh.top/fastrun

保存成功

在这里插入图片描述

超出限制

在这里插入图片描述

登陆失败

在这里插入图片描述

交流

对RunController有什么问题的可以shouspencercjh@foxmail.com联系我,在Blog里我不会回复。

总结

  1. 我就当是来熟悉一下cn.hutool.http的使用,JSON的处理和Spring Security的简单使用。
  2. 以此反思,如何保障自己开发的系统的Api的安全。
  3. 这公司太傻了……太懒了……
  • 数据加密:高校体育App只有在request中进行了请求保护(sign),但数据没有加密(data明文);response开诚布公。
  • 更安全的登陆状态校验:我不知道它用的什么,我看一直在发uuid-utoken,JWT肯定比这个强,我自己用过试过。
  • 客户端做不好保护就别放关键信息。
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值