自动定时post

  • 需求分析
  • 第一步:fiddler抓包
  • 第二步:编写java提交post
  • 第三步:部署到服务器上定时运行
    • ①确认Linux环境。
    • ②上传所需jar和写好的Java文件到Linux
    • ③操作权限解决:
    • ④Linux下带jar包编译与运行Java程序
    • ⑤写sh脚本并且配置定时运行
  • 结语

需求分析

  1. 需求:实现发请求、签到自动化,每天定时提交,邮件提示结果,告别手动。(使用应当合理合法!)
  2. 案板上有:1台vps,linux centos7+fiddler抓包工具+jar包。
  3. 实现:先用fiddler抓包工具抓取提交打卡是的HTTP请求,再分析每天不同的地方,仿照着利用Java编写脚本发送类似请求,安排到服务器上设置一个定时任务就完事了。(以前做过用python+appuim现在想想真的憨憨。。)

第一步:fiddler抓包

注:涉及隐私部分用xxxxxx替代

POST https:xxxxxxxxxxxx HTTP/1.1
Host: xxxxxxxxxxx
Connection: keep-alive
Content-Length: 1267
Accept: */*
Origin: xxxxxxxxxxx
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Linux; Android 9; MI 6X Build/PKQ1.180904.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045409 Mobile Safari/537.36 MMWEBID/5700 MicroMessenger/7.0.18.1740(0x2700123B) Process/tools WeChat/arm64 NetType/WIFI Language/zh_CN ABI/arm64
Sec-Fetch-Mode: cors
Content-Type: application/json
Sec-Fetch-Site: same-origin
Referer: xxxxxxxxxxx
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7{"main":[{"TableName":"T_YQFKTJ","Data":[{"GUID":"xxxxxxxxxxx","TBRQ":"2020-11-01","TXJTSJ":"2020-11-01 00:07:26","XH":"xxxxxxxxxxx","XM":"xxx","SZXY":"xxxxx","BKYJS":"xxxxx","SZX":"","BKBJ":"xxxxx","YJSBJ":"","SS":"xxxxx","HQCS":"xxxxx","TBWD":"","KQWD":"xxxxxx","JYDD":"","SFWQZBLYYZDWQZ":"否","MQSTQK":"","SFWYSBLYYZDWYS":"否","YSJYDD":"","SFWJZGL":"未曾隔离","JZGLKSSJ":"","JZGLJSSJ":"","TNSFYQZBRYGMQJC":"否","QZBRJCDDSSX":"","TNSFZHBZZHTJHBYHB":"否","FHYY2":"","SFJRDH":"否","QTXCGSJ":"","SFDHZQTXQ":"否","JJTZYQGLSJ":"","SFWJJGL":"无","TNSFDDLKHZTJWZWLHYSD":"否","FHYY1":"","LQHZJKMQK":"已领取“绿码“","JSSTSFYJWRYJC":"否","JZGLDD":"","YSMQSTQK":"未缺课","JZBHBMTZGL":"未离校","JJGLYY":"未离杭","JZLXDH":"","JJGLKSSJ":"","JJGLJSSJ":"","JJLXDH":"","QZBRJCSJ":"","QZBRJCFS":"","DDHBRQ":"","LKHZTJHBRQ":"","JCRQ":"","DDWZRQ":"","ZZHZTJWZRQ":"","DDWLHZHYRQ":"","ZZHZTJWLRQ":"","FHSJ2":"","RZYHJCYSQTXZYSJJCYSSJ":"","RZYYSJC":""}],"TableId":"xxxxxxx"}],"sub":[]}

可以看到打卡提交了一个带着json的post请求,接下来需要编写Java代码实现模拟post提交json数据。

第二步:编写java提交post

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;
import com.alibaba.fastjson.JSONObject;public class testdaka {private static final String USER = "私人xxxx"; // 发件人称号,同邮箱地址private static final String PASSWORD = "xxxxxx"; // 如果是qq邮箱可以使户端授权码,或者登录密码public static String mailmessage="";public static String searchmessage="";public static void search(String path,String data) {try {URL url = new URL(path);HttpURLConnection conn = (HttpURLConnection) url.openConnection();PrintWriter out = null;conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");conn.setRequestProperty("Host", "按需自查xxxxxx");conn.setRequestProperty("Connection", "keep-alive");conn.setRequestProperty("Accept", "*/*");conn.setRequestProperty("Origin", "xxxxx");conn.setRequestProperty("X-Requested-With", "XMLHttpRequest");conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Linux; Android 9; MI 6X Build/PKQ1.180904.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045409 Mobile Safari/537.36 MMWEBID/5700 MicroMessenger/7.0.18.1740(0x2700123B) Process/tools WeChat/arm64 NetType/WIFI Language/zh_CN ABI/arm64");conn.setRequestProperty("Sec-Fetch-Mode", "cors");conn.setRequestProperty("Sec-Fetch-Site", "same-origin");conn.setRequestProperty("Accept-Encoding", "gzip, deflate, br");conn.setRequestProperty("Accept-Language", "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7");conn.setDoOutput(true);conn.setDoInput(true);conn.setRequestMethod("POST");out = new PrintWriter(conn.getOutputStream()); out.print(data);out.flush();InputStream is = conn.getInputStream();BufferedReader br = new BufferedReader(new InputStreamReader(is));String str = "";while ((str = br.readLine()) != null) {str=new String(str.getBytes(),"UTF-8");searchmessage=str;//System.out.println(str);}is.close();conn.disconnect();} catch (Exception e) {e.printStackTrace();}}public static void send(String path,JSONObject data) {try {URL url = new URL(path);HttpURLConnection conn = (HttpURLConnection) url.openConnection();PrintWriter out = null;conn.setRequestProperty("Content-Type", "application/json;charset=UTF-8");conn.setRequestProperty("Host", "xxxxx");conn.setRequestProperty("Connection", "keep-alive");conn.setRequestProperty("Accept", "*/*");conn.setRequestProperty("Origin", "xxxxx");conn.setRequestProperty("X-Requested-With", "XMLHttpRequest");conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Linux; Android 9; MI 6X Build/PKQ1.180904.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045409 Mobile Safari/537.36 MMWEBID/5700 MicroMessenger/7.0.18.1740(0x2700123B) Process/tools WeChat/arm64 NetType/WIFI Language/zh_CN ABI/arm64");conn.setRequestProperty("Sec-Fetch-Mode", "cors");conn.setRequestProperty("Sec-Fetch-Site", "same-origin");conn.setRequestProperty("Accept-Encoding", "gzip, deflate, br");conn.setRequestProperty("Accept-Language", "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7");conn.setDoOutput(true);conn.setDoInput(true);conn.setRequestMethod("POST");out = new PrintWriter(conn.getOutputStream()); out.print(data.toJSONString());out.flush();InputStream is = conn.getInputStream();BufferedReader br = new BufferedReader(new InputStreamReader(is));String str = "";while ((str = br.readLine()) != null) {str=new String(str.getBytes(),"UTF-8");mailmessage=str;}is.close();conn.disconnect();} catch (Exception e) {e.printStackTrace();}}//百度的邮件工具类,用到activation-1.1.jar和javax.mail-1.6.0.jarpublic static boolean sendMail(String to, String text, String title){try {final Properties props = new Properties();props.put("mail.smtp.auth", "true");// props.put("mail.smtp.host", "smtp.qq.com");props.put("mail.smtp.host", "smtp.163.com");// 发件人的账号props.put("mail.user", USER);//发件人的密码props.put("mail.password", PASSWORD);// 构建授权信息,用于进行SMTP进行身份验证Authenticator authenticator = new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {// 用户名、密码String userName = props.getProperty("mail.user");String password = props.getProperty("mail.password");return new PasswordAuthentication(userName, password);}};// 使用环境属性和授权信息,创建邮件会话Session mailSession = Session.getInstance(props, authenticator);// 创建邮件消息MimeMessage message = new MimeMessage(mailSession);// 设置发件人String username = props.getProperty("mail.user");InternetAddress form = new InternetAddress(username);message.setFrom(form);// 设置收件人InternetAddress toAddress = new InternetAddress(to);message.setRecipient(Message.RecipientType.TO, toAddress);// 设置邮件标题message.setSubject(title);// 设置邮件的内容体message.setContent(text, "text/html;charset=UTF-8");// 发送邮件Transport.send(message);return true;}catch (Exception e){e.printStackTrace();}return false;}public static void main(String[] args) {//先打卡Date date = new Date();DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");String format = dateFormat.format(date);//System.out.println(format);//每日必改"TBRQ":"2020-11-01","TXJTSJ":"2020-11-01 00:07:26",// String TBRQ = "2020-11-01";String TBRQ = format;String TXJTSJ = format+" 00:08:26";String GUID = "xxxxx";String XH="xxxxx";String XM= "xxxxx";String BKBJ = "xxxxxx";String LoginUserID ="xxxxxxx";String strjson = "{\"main\":[{\"TableName\":\"T_YQFKTJ\",\"Data\":[{\"GUID\":\""+GUID+"\",\"TBRQ\":\""+TBRQ+"\",\"TXJTSJ\":\""+TXJTSJ+"\",\"XH\":\""+XH+"\",\"XM\":\""+XM+"\",\"SZXY\":\"xxxxxxx\",\"BKYJS\":\"xxxx\",\"SZX\":\"\",\"BKBJ\":\""+BKBJ+"\",\"YJSBJ\":\"\",\"SS\":\"xxxxx\",\"HQCS\":\"xxxxxx\",\"TBWD\":\"\",\"KQWD\":\"xxxxxx\",\"JYDD\":\"\",\"SFWQZBLYYZDWQZ\":\"否\",\"MQSTQK\":\"\",\"SFWYSBLYYZDWYS\":\"否\",\"YSJYDD\":\"\",\"SFWJZGL\":\"未曾隔离\",\"JZGLKSSJ\":\"\",\"JZGLJSSJ\":\"\",\"TNSFYQZBRYGMQJC\":\"否\",\"QZBRJCDDSSX\":\"\",\"TNSFZHBZZHTJHBYHB\":\"否\",\"FHYY2\":\"\",\"SFJRDH\":\"否\",\"QTXCGSJ\":\"\",\"SFDHZQTXQ\":\"否\",\"JJTZYQGLSJ\":\"\",\"SFWJJGL\":\"无\",\"TNSFDDLKHZTJWZWLHYSD\":\"否\",\"FHYY1\":\"\",\"LQHZJKMQK\":\"已领取“绿码“\",\"JSSTSFYJWRYJC\":\"否\",\"JZGLDD\":\"\",\"YSMQSTQK\":\"未缺课\",\"JZBHBMTZGL\":\"未离校\",\"JJGLYY\":\"未离杭\",\"JZLXDH\":\"\",\"JJGLKSSJ\":\"\",\"JJGLJSSJ\":\"\",\"JJLXDH\":\"\",\"QZBRJCSJ\":\"\",\"QZBRJCFS\":\"\",\"DDHBRQ\":\"\",\"LKHZTJHBRQ\":\"\",\"JCRQ\":\"\",\"DDWZRQ\":\"\",\"ZZHZTJWZRQ\":\"\",\"DDWLHZHYRQ\":\"\",\"ZZHZTJWLRQ\":\"\",\"FHSJ2\":\"\",\"RZYHJCYSQTXZYSJJCYSSJ\":\"\",\"RZYYSJC\":\"\"}],\"TableId\":\"xxxxxx\"}],\"sub\":[],\"LoginUserID\":\""+LoginUserID+"\",\"GUID\":\""+GUID+"\",\"FORMID\":\"xxxxxxxxxxx\"}";//用到了fastjson-1.2.74.jarJSONObject jsonobj = JSONObject.parseObject(strjson);try {send("抓包到的网址",jsonobj);} catch (Exception e) {//防止偶然的连接resetsend("抓包到的网址",jsonobj);}//再判断try {search("抓包到的网址,查询可能带日期自行更改");} catch (Exception e) {search("抓包到的网址,查询可能带日期自行更改");}//发邮件String sendmail ="打卡的结果:"+ mailmessage+"\r\n"+"打卡后确认的结果:"+searchmessage;//System.out.println(sendmail);sendMail("xxxxx@qq.com", sendmail, "打卡结果!");}}

第三步:部署到服务器上定时运行

①确认Linux环境。

确保系统时间为北京时间。
确保java环境配置完毕。
确保xshell连接正常。

②上传所需jar和写好的Java文件到Linux

用到的jar包有

 activation-1.1.jar,fastjson-1.2.74.jar,javax.mail-1.6.0.jar,

以及写好的程序daka.java

在xshell连接下用rz命令上传到目录

 /root/mylearn/webapp/daka

③操作权限解决:

修改使用文件夹的操作权限

 sudo chmod -R 777 /root/mylearn/webapp/daka

④Linux下带jar包编译与运行Java程序

jar包之间用:隔开,最后也要加。

javac -cp /root/mylearn/webapp/daka/libs/activation-1.1.jar:/root/mylearn/webapp/daka/libs/fastjson-1.2.74.jar:/root/mylearn/webapp/daka/libs/javax.mail-1.6.0.jar: /root/mylearn/webapp/daka/daka.java

得到class文件后,运行如下。

java -cp /root/mylearn/webapp/daka/libs/activation-1.1.jar:/root/mylearn/webapp/daka/libs/fastjson-1.2.74.jar:/root/mylearn/webapp/daka/libs/javax.mail-1.6.0.jar: daka

⑤写sh脚本并且配置定时运行

写sh脚本

vi daka.sh

按i进入编辑,粘贴如下,:x保存退出。

#!/bin/bash
cd /root/mylearn/webapp/daka
java -cp /root/mylearn/webapp/daka/libs/activation-1.1.jar:/root/mylearn/webapp/daka/libs/fastjson-1.2.74.jar:/root/mylearn/webapp/daka/libs/javax.mail-1.6.0.jar: daka

配置定时

vi /etc/crontab#改类似定时,这里设置00:10分打卡10 00 * * * root /root/mylearn/webapp/daka/daka.sh

装载

 crontab /etc/crontab

重启定时服务

systemctl enable crond.service #开启启动
systemctl restart crond.service #重启服务

结语

前几个月暑假无聊用python+appuim弄过一个自己打卡的脚本,就是滚屏幕模拟点击的那种。想把它部署到服务器,发现不现实,后来想到他打卡不就是个提交表单嘛,不就是个post嘛。所以搞了个这个,以后不用自己打卡了嘿嘿嘿!

java实现post签到相关推荐

  1. java实现连续签到加分_java实现app签到功能

    本文实例为大家分享了java实现app签到功能的具体代码,供大家参考,具体内容如下 1.首先设计二张表,第一张表sign_calc记录用户连续签到次数,字段id,user_id,continue_da ...

  2. Java蘑菇钉云签到管理系统源码

    介绍: Java蘑菇钉云签到管理系统源码基于spring-boot-task框架开发, 功能介绍:用户通过配置个人信息实现每天定时云签到 网盘下载地址: http://kekewl.net/mJK2M ...

  3. java实现bitmap签到,BITMAP实现签到

    场景需求 适用场景如签到送积分.签到领取奖励等,大致需求如下: 签到1天送1积分,连续签到2天送2积分,3天送3积分,3天以上均送3积分等. 如果连续签到中断,则重置计数,每月初重置计数. 当月签到满 ...

  4. java swing 人脸签到系统 ----- 调用 opencv 多线程

    文章目录 java 源代码地址 code aliyun 软件功能展示 项目 设计的 技术问题总结 工作 进程 以及 渲染 进程 如何分离 人脸识别 sdk 的集成与调用 java 调用 opencv ...

  5. java健身房会员签到,会员提醒,留言,消费,公告

    1. 主页:即时登录,提供会员和管理员的登录. 2. 会员卡办理:登记健身会员的信息,设置卡到期时间. 3. 会员消费系统:对健身会员的日常消费进行添加. 4. 在线交流:健身会员之间的交流,管理员可 ...

  6. Java一周签到一次_java做的一个简易的微信签到系统

    1.发送签到会提示你签到成功,并获得2积分 2.一天只能签到一次 3.连续一星期签到会额外送12个积分 4.可以查询你当前积分总数 效果图:本订阅好还在完善中,可能还不能用,不久后将会一步步完善功能, ...

  7. java实现日历签到功能_[java] 可视化日历的实现(基于Calendar类 )

    写在前面 博文安排顺序如下 1.写在前面 2.源码 3.思路 4.相关知识 该小程序是对Date类及其相关类的复习 要求如下图:实现可视化日历 实现思路 1.先从键盘输入指定格式的字符串(str) 2 ...

  8. java设计按月每天签到_java实现app签到功能

    本文实例为大家分享了java实现app签到功能的具体代码,供大家参考,具体内容如下 1.首先设计二张表,第一张表sign_calc记录用户连续签到次数,字段id,user_id,continue_da ...

  9. java实现年会微信签到,签到后在大屏中展示,导出签到信息

    java实现微信签到,签到后在活动大屏中实时展示签到人信息,也可以导出签到人信息用于抽奖. 一.微信公众号申请及配置 1.微信公众号申请,请参考https://jingyan.baidu.com/ar ...

最新文章

  1. 怎么测内阻 恒压源_电池内阻及简单测试方法
  2. C++和Python的交互
  3. python中使用函数的优点,对于python类使用“get函数”有什么好处?
  4. 介绍一个前端页面开发必备神器,chrome扩展,设备模拟器
  5. mysql vba日期空值_使用SQL(VBA/ADO)命令填充来自重复记录的相应非空值的NULL字段...
  6. JavaFX UI控件教程(二十一)之Tooltip
  7. centos修改磁盘uuid_如何修改linux磁盘的uuid
  8. UC伯克利超酷研究:舞痴和舞王之间,只差一个神经网络
  9. CSDN发布:AI技术人才成长路线图
  10. linux光盘挂载加载过程,如何在Linux系统下挂载光盘
  11. webpack遇见的坑:Please install 'webpack-cli' in addition to webpack itself to use the CLI.
  12. 考研计算机专业课复试都有什么,2019计算机考研复试科目总结
  13. 加权移动平均线(Weigted Moving Average,WMA)
  14. matlab绘制小人奔跑动图,如何做奔跑的小人运动规律-动画初学者入门教程
  15. FPGA如何固化程序到EPCS之入门的理想教程
  16. [javaSE] 基本类型(String相关)
  17. 各种颜色十六进制代码表
  18. android.permission.camera,Android - revoked permission android.permission.CAMERA
  19. OpenGL MFC单文档 实现轨迹球
  20. 忽视显而易见的东西:差分放大器的输入阻抗

热门文章

  1. 钉钉、钉应用(微应用和E应用)开发介绍
  2. oppor11可以按Android吗,OPPO R11有NFC吗?OPPOR11支持NFC功能吗?
  3. java养老院管理系统
  4. 基于树莓派4B的智能无人巡逻小车设计-答辩PPT
  5. 网页图片自适应手机屏幕大小
  6. 汉诺塔_最优通解(待证)_碟子移动步骤
  7. 【脑洞大开】做计算类工作的人为什么费钱?
  8. 2022北京十大律师事务所排名(推荐参考)
  9. PHP面试中会被问到得问题及答案总结
  10. 小米 OPPO 屏幕指纹识别技术都升级了,今年就能用到...