起因
偶然看到一個同事設置鬧鐘,提醒自己下班打開。就突發奇想,既然身爲後臺開發是不是可以用程序來實現自動打卡的功能呢?
於是開起來fiddler進行抓包,發現設置代理,雲之家無法進行簽到功能。既然電腦無法進行代理,那我直接在手機上開啓個代理應用進行抓包不就行了麼?
接口分析
最後抓到的結果簽到接口
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-qSQK83Y1-1573177393634)(https://github.com/w77996/BlogsImage/blob/master/python_yunzhijia/1565155502.jpg?raw=true)]
分析下接口
- 域名:
www.yunzhijia.com
- 接口:
/attendance-signapi/signservice/sign/signIn h2
- 請求方式:
POST
- 請求參數
lng=緯度&lat=精度&bssid=&configId=配置ID&networkId=網絡ID&userId=用戶ID&ssid=
- 請求頭部
1.user-agent
2.opentoken
3.authorization
4.content-type
5.accept-language
試着請求了一下
編碼
試了一下將獲取的接口直接請求,雲之家並沒有對token的時間進行限制,所以拿到請求參數後可以直接擼代碼了。
考慮了一下java代碼的繁重,最後決定用python來完成自動簽到的功能。
本來還用vue+axios寫了一個網頁版,但是後面發現axios總是會發送一個option請求導致返回錯誤,最後就沒有去實現了。
python主要用到了三個庫:
- requests
- json
- apscheduler
apscheduler作爲定時器實現自動簽到的功能
import requests
import json
from apscheduler.schedulers.blocking import BlockingScheduler
# 簽到
def sign_in():
url = " http://www.yunzhijia.com/attendance-signapi/signservice/sign/signIn?lng=&bssid=&configId=&networkId=&userId=&ssid=&lat="
headers = {
"user-agent": "",
"opentoken": "",
"authorization": "",
"accept-language":"",
}
response = requests.post(url, headers=headers)
print(response.text)
response_json = json.loads(response.text)
print(response_json['success'])
def job():
sched = BlockingScheduler()
sched.add_job(sign_in, 'cron', hour=18, minute=0)
sched.add_job(sign_in, 'cron', hour=9, minute=0)
sched.start()
if __name__ == '__main__':
job()
結尾
此代碼僅供學習用,我自己寫完這個代碼後也沒有用過,平時也是準點上下班,希望大家不要隨意使用,如有侵權問題請聯繫,隨時刪除。