天天看點

對高校體育App的研究(三)【終】接口相關資料和所有程式都在我的碼雲線上通路位址:https://www.spencercjh.top:8090/fastrun/更新 2019年3月10日聲明鳴謝摘要相關真實Session開始問題結果交流總結

未完待續,對高校體育的研究都會在這篇Blog裡寫完,想到了就會補上來。

接口相關資料和所有程式都在我的碼雲

線上通路位址:https://www.spencercjh.top:8090/fastrun/

目錄

  • 接口相關資料和所有程式都在[我的碼雲](https://gitee.com/spencercjh/gxhttpapitest)
  • 線上通路位址:https://www.spencercjh.top:8090/fastrun/
  • 更新 2019年3月10日
  • 聲明
  • 鳴謝
  • 摘要
  • 相關真實Session
  • 開始
    • 環境
    • 源碼
  • 問題
    • 問題1 Header是有差別的
    • 問題2 POST請求中不要把body中的data URLEncoder
    • 問題3 如何修改資料包
    • 問題4 localhost與伺服器運作時發生不同狀況
    • 問題5 朋友用杉達的賬号測,發現途經點資料異常了
    • 問題6 定時器自動執行
    • 問題7 utoken根本不驗證
  • 結果
    • 儲存成功
    • 超出限制
    • 登陸失敗
  • 交流
  • 總結

更新 2019年3月10日

對方伺服器改了host,代碼估計也更了,這個項目已經過時了,但http封包分析的流程是永不過時的。希望能夠幫助到大家。

聲明

本文謹為對上海微搖網絡科技有限公司出品的高校體育(Android App)的接口自動化測試。

鳴謝

感謝CSDN使用者@留白大人的BLOG,感謝GITHUB使用者@RyuBAI的開源分享和某不願透露姓名的同學的指導。

摘要

對高校體育App的研究(三)【終】接口相關資料和所有程式都在我的碼雲線上通路位址:https://www.spencercjh.top:8090/fastrun/更新 2019年3月10日聲明鳴謝摘要相關真實Session開始問題結果交流總結

**對上述接口進行自動化“測試”。輸入手機、密碼、開始跑步時間、結束跑步時間、距離、性别就能輸出上傳跑步資料結果。

接口相關資料和所有程式都在我的碼雲

相關真實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這個接口,我真的仏了:

對高校體育App的研究(三)【終】接口相關資料和所有程式都在我的碼雲線上通路位址:https://www.spencercjh.top:8090/fastrun/更新 2019年3月10日聲明鳴謝摘要相關真實Session開始問題結果交流總結

結果

線上通路位址:https://www.spencercjh.top/fastrun

儲存成功

對高校體育App的研究(三)【終】接口相關資料和所有程式都在我的碼雲線上通路位址:https://www.spencercjh.top:8090/fastrun/更新 2019年3月10日聲明鳴謝摘要相關真實Session開始問題結果交流總結

超出限制

對高校體育App的研究(三)【終】接口相關資料和所有程式都在我的碼雲線上通路位址:https://www.spencercjh.top:8090/fastrun/更新 2019年3月10日聲明鳴謝摘要相關真實Session開始問題結果交流總結

登陸失敗

對高校體育App的研究(三)【終】接口相關資料和所有程式都在我的碼雲線上通路位址:https://www.spencercjh.top:8090/fastrun/更新 2019年3月10日聲明鳴謝摘要相關真實Session開始問題結果交流總結

交流

對RunController有什麼問題的可以[email protected]聯系我,在Blog裡我不會回複。

總結

  1. 我就當是來熟悉一下cn.hutool.http的使用,JSON的處理和Spring Security的簡單使用。
  2. 以此反思,如何保障自己開發的系統的Api的安全。
  3. 這公司太傻了……太懶了……
  • 資料加密:高校體育App隻有在request中進行了請求保護(sign),但資料沒有加密(data明文);response開誠布公。
  • 更安全的登陸狀态校驗:我不知道它用的什麼,我看一直在發uuid-utoken,JWT肯定比這個強,我自己用過試過。
  • 用戶端做不好保護就别放關鍵資訊。