为什么会整健康信息自动提交,还得从一只蝙蝠说起。
受2019-nCoV的影响,为了解每个人的健康情况,很多单位都要求员工每日上报自己的健康情况。这种行为出发点是好的,但在实际执行过中却显得极为形式主义。每天规定早07:30必须打卡上报;上报信息准确性有待考证;强制使用各种APP导致个人信息泄露(虽然说在互联网时代获取一个人的信息极为容易,但也顶不住这样白给)……面对这种情况,个人无力反抗,只能按部就班的使用Python上交。(手动提交是不可能手动提交的,全自动化提交不香嘛。)
一、数据包分析
提交数据必然会向服务器发送信息,因此就需要抓取数据包。这里我采用的是Drony(安卓应用,用作HTTP代理)+ BurpSuite 。通过分析发现就是简单的POST提交一个带有json数据包。值得注意的是,安卓的WLAN自带的HTTP代理并不能发送全部的数据包到Burp,所以,最后选择了Drony内建VPN进行代理转发。(不想使用电脑的话可以考虑使用HttpCanary、Packet Capture等Android应用抓包)
User-Agent:Dart/2.7 (dart:io) info = { "home":"在家", "address":"", "keepInHome":"否", "keepInHomeDate":"null", "contact":"否", "health":"否", "fever":"否", "feverValue":"", "cough":"否", "diarrhea":"否", "arriveHubei":"无", "travel":"无", "remark":"无", "submitCount":1 }
二、Python脚本编写
1. 建立会话
session = requests.session()
2.登录获取cookie
login = session.post(login_url, json = user, headers = headers)
3.提交数据
health = session.post(health_url, json = info, headers = headers)
三、自动执行
Linux系统使用corntab -e建立计划任务;Windows使用taskschd.msc建立计划任务。
但由于APP托管的服务器日常卡顿,且还会屏蔽ip,所以托管在服务器上并不是那么稳定,因此考虑托管在Android手机。托管在安卓需要2个应用,1个插件(Tasker, Termux; Termux:Tasker),且都不需要root。
(1)Termux——终端模拟器和Linux环境
Android基于Linux,这个软件就是在安卓上实现Linux环境。支持运行python, PHP, MySQL等。
0.0下载地址
#Google Play Store https://play.google.com/store/apps/details?id=com.termux #F-Droid https://f-droid.org/repository/browse/?fdid=com.termux
Termux使用起来与Linux Shell相似。pkg管理程序包(使用方法与apt、yum类似)。
0.1更换国内源(可选)
将原来的https://termux.org/packages/官方源替换为http://mirrors.tuna.tsinghua.edu.cn/termux
#vi $PREFIX/etc/apt/sources.list #deb https://termux.org/packages/ stable main deb https://mirrors.tuna.tsinghua.edu.cn/termux stable main
1.1安装python3
pkg install python
1.2安装requests模块
pip install requests
2.建立任务存放目录
完整路径/data/data/com.termux/files/home/.termux/tasker/
未root时程序仅能访问的目录,将所有脚本都放在这个目录下.
mkdir -p ~/.termux/tasker
4.1py文件第一行执行声明
#!/data/data/com.termux/files/usr/bin/python
4.2py文件权限设置(*代表你的py文件名)
chmod 755 *.py
(2)Termux:Tasker
插件。用于Tasker等调用。注意:不要在Google Play和F-Droid之间混合安装Termux和插件。
下载地址
#Google Play Store https://play.google.com/store/apps/details?id=com.termux.tasker #F-Droid https://f-droid.org/packages/com.termux.tasker/ #更多插件请查看官方Wiki https://wiki.termux.com/wiki/Main_Page
(3)Tasker——让安卓全自动化
这是一个十分强大的应用,你想做的没有做不到的…其实单独使用这个软件就可以完成打卡操作,但步骤过于繁琐,于是就考虑了和Termux双宿双飞。
下载地址(上不了Goolge可以考虑apkpure、apkmirror等网站下载)
#Google Play Store http://market.android.com/details?id=net.dinglisch.android.taskerm #官网下载试用 https://tasker.joaoapps.com/download.html
Tasker使用的时候注意好应用权限设置,另外还要自启动、关联启动等应用的设置,以及设置电池优化白名单。
大致流程1.创建配置文件-时间 2.创建任务-插件-Termux:Tasker-配置-*.py 3.点√保存
附:python签到模板(自行修改user、info、url等信息)
#!/data/data/com.termux/files/usr/bin/python # -*- coding: utf-8 -*- import re import requests import os import time import sys import json headers = { 'User-Agent':'Dart/2.7 (dart:io)' } user = { "username":"12345678", "password":"87654321" } info = { "home":"在家", "address":"", "keepInHome":"否", "keepInHomeDate":"null", "contact":"否", "health":"否", "fever":"否", "feverValue":"", "cough":"否", "diarrhea":"否", "arriveHubei":"无", "travel":"无", "remark":"无", "submitCount":1 } login_url = "http://localhost/authentication/login" health_url = "http://localhost/student/healthInfo/save" session = requests.session() login = session.post(login_url, json = user, headers = headers) cookies = session.cookies.get_dict() health = session.post(health_url, json = info, headers = headers) log = "./log.txt" with open(log, "a") as f: f.write(time.strftime("[%Y/%m/%d %H:%M:%S]") + '\n') f.write(json.dumps(cookies, sort_keys=True, indent=4, separators=(',', ':')) + '\n') f.write(json.dumps(health.json(), sort_keys=True, indent=4, separators=(',', ':')) + '\n') f.close()