未完待續,對高校體育的研究都會在這篇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的開源分享和某不願透露姓名的同學的指導。
摘要
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38CXlZHbvN3cpR2Lc1TPB10QGtWUCpEMJ9CXsxWam9CXwADNvwVZ6l2c052bm9CXUJDT1wkNhVzLcRnbvZ2Lc1TPn5EMnRVT4FFRNBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2LcRHelR3LcJzLctmch1mclRXY39DM4QzNxQTM3EjMxATM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
**對上述接口進行自動化“測試”。輸入手機、密碼、開始跑步時間、結束跑步時間、距離、性别就能輸出上傳跑步資料結果。
接口相關資料和所有程式都在我的碼雲
相關真實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與伺服器運作時發生不同狀況
- paramData.setCookie(String.valueOf(cookie.get(0))); 本地不報錯 服務端空指針
- 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有什麼問題的可以[email protected]聯系我,在Blog裡我不會回複。
總結
- 我就當是來熟悉一下cn.hutool.http的使用,JSON的處理和Spring Security的簡單使用。
- 以此反思,如何保障自己開發的系統的Api的安全。
- 這公司太傻了……太懶了……
- 資料加密:高校體育App隻有在request中進行了請求保護(sign),但資料沒有加密(data明文);response開誠布公。
- 更安全的登陸狀态校驗:我不知道它用的什麼,我看一直在發uuid-utoken,JWT肯定比這個強,我自己用過試過。
- 用戶端做不好保護就别放關鍵資訊。