复yu习不下去了。。。于是摸了一个自动上报个人健康状况的脚本。

抓包还挺好玩的。

仅供学习,请勿滥用。源码如下,欢迎转载:(下载请点这里

"""
Created on 2020-6-23
@author: hecheng
"""

# -*- coding:utf-8 -*-
import json, time
try:
    import requests
except:
    print('发送http请求需要安装requests库。请先在命令行窗口执行pip install requests安装')
    time.sleep(60)

'''下面这俩变量不能乱动,否则填报不成功,因为
Cookie中的JSESSIONID和timestamp,token,sign,wid等参数是相互验证的关系,变动之后无法通过服务器的验证。
也正因此,本脚本中的参数随时可能过期,请不要过度依赖。
'''
url = "http://fygrtb.dhu.edu.cn/pdc/formDesignApi/dataFormSave?wid=9D6DB9748A6DC440E053D090C1DA65C2&userId="
#伪装http请求头部,假装自己是企业微信
headers = {'Connection': 'keep-alive',
            'Content-Length': '741',
            'Accept': 'application/json, text/javascript, */*; q=0.01',
            'Origin': 'http://fygrtb.dhu.edu.cn',
            'X-Requested-With': 'XMLHttpRequest',
            'User-Agent': 'Mozilla/5.0 (Linux; Android 10; TAS-AL00 Build/HUAWEITAS-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045224 Mobile Safari/537.36 wxwork/3.0.24 MicroMessenger/7.0.1 NetType/4G Language/zh Lang/zh',
            'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
            'Referer': 'http://fygrtb.dhu.edu.cn/pdc/report/myHealthy?timestamp=FA406236E186D59EA3BF5D12F68115FC&token=FB8FC5AFA9FAA19DFB5CCB504855249D&sign=FA406236E186D59E3FA35E329D163D54052C68C2AC90AF04',
            'Accept-Encoding': 'gzip, deflate',
            'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
            'Cookie': "JSESSIONID=6C61B7FD75F3E26D7FFB028C3AA8E4CA; fytbxt=fytbxt_01"
           }
#保存有关各项填报数据的信息
tabs = {'XM_786837':'填报人。示例:王羲之\n',
            'XGH_757439':'学/工号。示例:190120337\n',
            'BMMC_211878':'学院/部门。示例:理学院\n',
            'TEXT_902701':'籍贯(省份)。示例:湖南省\n',
            'XB_520918':'性别。示例:男\n',
            'LXDH_176767':'联系电话。示例:17674010702\n',
            'PICKER_212508':'现所在城市(填写目前在何城市,而非填写常住城市)。示例:贵州省,贵阳市,白云区\n\n提示:各行政级别之间用!!!半角(英语)逗号!!!隔开\n\n',
            'RADIO_187077':'个人健康状况。示例:良好\n',
            'TEXT_420290':'今日体温(度)。示例:36.2\n',
            'RADIO_675271':'现人员位置。示例:在其它地区\n',
            'RADIO_27512':'2020年是否去过外省市,且目前已回沪。示例:否\n',
            'DATETIME_27941':'参数DATETIME_27941意义不明。建议留白\n',
            'DATETIME_345046':'拟返沪日期(目前在外省市人员填写)。示例:2020/09/01\n',
            'TEXT_648942':'拟返沪日期备注。\n',
            'RADIO_260749':'是否为以下情况:\n2020年1月10日后在湖北逗留过\n与确诊患者有密切接触经历\n目前仍然在湖北以上皆否\n示例:以上皆否\n',
            'RADIO_237155':'家属中是否有以下情况:\n2020年1月10日后在湖北逗留过\n与确诊患者有密切接触经历\n目前仍然在湖北以上皆否\n示例:以上皆否\n',
            'RADIO_89148':'家属健康状况。示例:均健康\n',
            'TEXTAREA_57709':'备注。可进一步说明以上信息不能说明的特别情况,如:返沪乘坐交通工具等\n'
            }
#每次填报间隔的小时数
gap = 1

def getdata():
    flag = 0
    
    try:
        with open('data','r',encoding='utf-8') as f:
            data = eval(f.read())
            print('------数据读取成功!------')
    except:
        print('这可能是本脚本首次运行。你需要输入有关的信息;\n建议你现在打开企业微信填报界面,以免信息有误导致填报失败;\n信息会被保存在脚本所在目录下的data文件中,只有在必要的时候才会被上传到fygrtb.dhu.edu.cn(东华大学微门户)')
        flag = 1

    if flag == 1:
        data = {}
        for key in tabs.keys():
            data[key] = str(input(tabs[key]))
        with open("data","w",encoding='utf-8') as f:
            f.write(str(data))
            print('------数据保存成功!------')

    return data

def main(url,headers,tabs,gap):
    data = getdata()
    url += data['XGH_757439']
    flag = input('要修改数据,请删除本脚本所在目录下的data文件然后重新运行;\n按下回车来开始自动填报。')
    print('脚本被设置为每 ',gap,' 小时自动填报一次...\n在脚本的第48行可以修改这一设置。')
    if flag != '':
        return None
    while True:
        timenow=time.localtime()
        data["DATETIME_CYCLE"]="%d/%02d/%02d"%(timenow[0],timenow[1],timenow[2])
        try:
            r = requests.post(url,headers=headers,data=data,timeout=5)
        except Exception as e:
            print('发送POST请求时出错:',e,'脚本将在60秒后重试')
            time.sleep(60)
            continue
        flag =0

        try :
            result = r.json()["result"]
            if result:
                flag = 1
        except:
            print('服务器返回的数据有误。')

        if r.status_code==200 and flag == 1:
            timenext = time.localtime(time.time()+3600*gap)
            print("上报成功,当前时间:%s,%d点%d分...\n下次填报时间:%d点%d分"%(data["DATETIME_CYCLE"], timenow[3], timenow[4], timenext[3], timenext[4]))
        elif r.status_code==200 and flag == 0:
            print('上报失败!!!你填写的信息可能有误。')
        else:
            print("本次上报不成功...当前时间:%s,%d点%d分...\n服务器返回的错误代码为:%3d"%(data["DATETIME_CYCLE"], timenow[3], timenow[4], r.status_code))

        time.sleep(3600*gap)

if __name__ == '__main__':
    main(url,headers,tabs,gap)

项目已同步到py.he-cheng.space

你可能会说:我也不可能一直开机挂着这个程序啊!

问题不大。你可以把你生成的data文件发给我,我会帮你把它挂在服务器的后台(当然我不会乱动你的隐私数据)

(形式主义,重复工作什么的见鬼去吧!)


1 条评论

Jonrains · 8月 28, 2020 20:55

azazazaz

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注