自动打卡
最近听学弟说要毕业了,还要实习打卡,问我有没有什么办法?我原以为今年依然是蘑菇钉,那直接使用好了,但是学弟说今年全江西省都更换了实习打卡的平台,换到了江西智慧教育,话不多说,那就开始动手吧
直接上Stream开始抓包(苹果使用这个还是比较方面抓包的)
1.打开Stream,开启抓包
2.进入登录页面,开始登录
3.过滤多余的抓包数据,我们只针对http://sxsx.jxeduyun.com这个域名进行筛选
http://sxsx.jxeduyun.com:7779/portal-api/app/index/login
最终我看到了这样的一个接口
那肯定是登录接口了,那就尝试尝试模拟走一遍?
我们先看到了他的参数有这些
$datas = ["appLogin"=>true,"loginAccount"=>$data['loginAccount'],"password"=>$data['password'],"appUserId"=>"","loginUserType"=>"student","enrollmentYear"=>$data['enrollmentYear']];
但是呢Password是个加密密码?于是准备下手看看是如何加密的,然后碰巧我使用明文密码进行登录,成功了???
那password直接使用明文也可以咯?
那我们开始封装代码
登录接口
/**
* 登录
*/
public function login()
{
$data = Request::post();
// 验证数据
if($data['loginAccount'] == ''){
return ResponseUtils::error('账号不允许为空');
}else if($data['password'] == ''){
return ResponseUtils::error('密码不允许为空');
}else if($data['enrollmentYear'] == ''){
return ResponseUtils::error('请选择毕业年份');
}
$url = 'http://sxsx.jxeduyun.com:7779/portal-api/app/index/login';
$datas = ["appLogin"=>true,"loginAccount"=>$data['loginAccount'],"password"=>$data['password'],"appUserId"=>"","loginUserType"=>"student","enrollmentYear"=>$data['enrollmentYear']];
$res = $this->curl_post($url,$datas);
$responseData = json_decode($res, true);
if($responseData['code'] == 200){
$token = $responseData['data']['token'];
// 用户存在,直接返回登录成功
return ResponseUtils::successData([ 'token' => $token,"message"=>'登录成功']);
} else {
Db::table('sign_user')->insert([
'name'=>$name,
'loginAccount' => $data['loginAccount'],
'password' => $data['password'], // 不加密密码
'enrollmentYear' => $data['enrollmentYear'],
'addTime' => date('Y-m-d H:i:s'),
'last_login_time' => date('Y-m-d H:i:s'),
'last_login_ip' => Request::ip(),
'token' => $token
]);
return ResponseUtils::successData([ 'token' => $token]);
}
}else{
return ResponseUtils::error($responseData['msg']);
}
}
打卡接口
那登录成功肯定是远远不够的,我们从登录接口的信息中可以看到返回了一个token,这个token可以拼在Authorization里面使用
于是我们开始模拟打卡一下,然后开始抓包他的接口
同样也是很轻松的拿到了
http://sxsx.jxeduyun.com:7779/portal-api/practice/autonomyClock/add
参数如下:
$sign_data = [
"autonomyId" => $id,
"userId" => $userId,
"nickName" => $name,
"clockAddress" => $user['address'],
"fileId" => $uploadResult['data'],
"clockTime" => date("Y-m-d H:i:s"),
"clockType" => "签到",
"clockContent" => ""
];
剩下的就是自动封装模拟一遍即可