秒杀:准点开抢,先抢先得。
页面上的操作流程大致是这样的:登录->填写用户资料->等待倒计时->弹出随机问题->填写答案->提交。
前两步人工完成,程序完成从等待倒计时到提交结束的步骤。主要使用httpclient模拟http请求。前期工作主要研究下原站的相关js代码,获得各步骤必要的URL和相关参数。其中还用到了坛子里的
fastjson感谢一下
。
主要代码如下,就不做什么解释了。
Protocol easyhttps = new Protocol("https", new EasySSLProtocolSocketFactory(), 443);
Protocol.registerProtocol("https", easyhttps);
HttpClient httpClient = new HttpClient();
//字符编码
httpClient.getParams().setContentCharset("gbk");
HostConfiguration hc = new HostConfiguration();
hc.setHost("www.uqbook.cn", 80, easyhttps);
String configId = "200011111111444444";
String agent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13";
String refer = "https://www.uqbook.cn/sec_initListInfo.action";
String contentType = "application/x-www-form-urlencoded; charset=UTF-8";
//Cookie
String cookie = "JSESSIONID1=pkfXNQDY0DTKRpch4ngp62hD1LNmcp5Jpn8G2R2LQVylxHcH1hpr!-595124091";
String inputsubje = "";//答案一
String inputArith = "68";//答案二
int i = 1;
boolean isFirstIn = true;
while (true) {
if(isFirstIn){
//进入页面
GetMethod inMethod = new GetMethod("https://www.uqbook.cn/initInfo.action");
// 设置参数
inMethod.setRequestHeader("User-Agent", agent);
inMethod.setRequestHeader("Referer", refer);
inMethod.setRequestHeader("Cookie", cookie);
try {
int codeCode = httpClient.executeMethod(hc, inMethod);
InputStream inResp = inMethod.getResponseBodyAsStream();
//循环读取每一行
BufferedReader reader = new BufferedReader(new InputStreamReader(inResp));
String line = null;
String sysCurrentTime = "";
String secondTt = "";
while ((line = reader.readLine())!=null){
//对读取的数据进行编码转换
line = new String(line.getBytes(),"gb2312");
line = line.trim();
if(line.startsWith("var sysCurrentTime")){
sysCurrentTime = line.substring(line.indexOf("\"")+1, line.lastIndexOf("\""));
}else if(line.startsWith("var secondTt")){
secondTt = line.substring(line.indexOf("'")+1, line.lastIndexOf("'"));
}
//logger.info(line);
if(sysCurrentTime!="" && secondTt!=""){
break;
}
}
reader.close();
logger.info("服务器时间:sysCurrentTime="+sysCurrentTime);
logger.info("本机时间:"+DateUtil.getCurrentDateStr(DateUtil.C_TIME_PATTON_DEFAULT));
logger.info("还没到点...等待"+secondTt+"秒...");
Thread.sleep(Integer.parseInt(secondTt));
} catch (Exception e) {
e.printStackTrace();
logger.error("进入页面得到倒计时间异常:" + e);
continue;//继续来一次
}
}
isFirstIn = false;
// 1、取问题及答案
PostMethod subInfoMethod = new PostMethod("https://www.uqbook.cn/getSubjectInfo.action");
// 设置参数
subInfoMethod.setRequestHeader("User-Agent", agent);
subInfoMethod.setRequestHeader("Referer", refer);
subInfoMethod.setRequestHeader("Cookie", cookie);
subInfoMethod.addParameter("timeStamp", ""+System.currentTimeMillis());
subInfoMethod.addParameter("configId", configId);
try {
int subInfoCode = httpClient.executeMethod(hc, subInfoMethod);
String subInfoResp = subInfoMethod.getResponseBodyAsString();
if (subInfoResp == null || "".equals(subInfoResp)) {
logger.info("还没有发布安全问题及答案,本次退出,继续执行下一次!");
continue;
}
logger.info("安全问题及答案解码:" + EscapeUnescape.unescape(subInfoResp));
// 解析 JSON
JSONArray array = JSON.parseArray(subInfoResp);
JSONObject object = (JSONObject) array.get(0);
String content = object.getString("subjectContent");
inputArith = object.getString("arithmeticAnswer");
content = EscapeUnescape.unescape(content).replace("@", " ");
Parser parser = new Parser();
parser.setInputHTML(content);
parser.elements();
for (NodeIterator it = parser.elements(); it.hasMoreNodes();) {
Node node = it.nextNode();
if (node instanceof TagNode) {
TagNode tag = (TagNode) node;
if ("ttwrsnspysk".equalsIgnoreCase(tag
.getAttribute("id"))) {
inputsubje = tag.toPlainTextString().trim();
}
}
;
}
} catch (Exception e) {
e.printStackTrace();
}
inputArith = "27";
if (inputsubje == null || "".equals(inputsubje)
|| inputArith == null || "".equals(inputArith)) {
logger.info("获安全问题及答案时可能发生异常了,本次退出,继续执行下一次!");
continue;
}
//2、判断 是否参加过
PostMethod judgementSecSalMethod = new PostMethod("https://www.uqbook.cn/judgement.action");
// 设置参数
judgementSecSalMethod.setRequestHeader("User-Agent", agent);
judgementSecSalMethod.setRequestHeader("Referer", refer);
judgementSecSalMethod.setRequestHeader("Cookie", cookie);
judgementSecSalMethod.addParameter("timeStamp", ""+System.currentTimeMillis());
judgementSecSalMethod.addParameter("configId", configId);
try {
int judgementSecSalCode = httpClient.executeMethod(hc, judgementSecSalMethod);
String judgementSecSalResp = judgementSecSalMethod.getResponseBodyAsString();
} catch (Exception e) {
e.printStackTrace();
}
//3、验证问题和答案是否正确
PostMethod checkMethod = new PostMethod("https://www.uqbook.cn/judgementAnswer.action");
// 设置参数
checkMethod.setRequestHeader("User-Agent", agent);
checkMethod.setRequestHeader("Content-Type", contentType);
checkMethod.setRequestHeader("Referer", refer);
checkMethod.setRequestHeader("Cookie", cookie);
checkMethod.addParameter("timeStamp", ""+System.currentTimeMillis());
String tempInputsubje = inputsubje;
try {
tempInputsubje = URLEncoder.encode(inputsubje, "utf-8");
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
checkMethod.addParameter("inputsubje", tempInputsubje);
checkMethod.addParameter("inputArith", inputArith);
try {
int checkCode = httpClient.executeMethod(hc, checkMethod);
String checkResp = checkMethod.getResponseBodyAsString();
} catch (Exception e) {
e.printStackTrace();
}
// 3、提交抢购!
PostMethod submitMethod = new PostMethod("https://www.uqbook.cn/submit.action");
// 设置参数
submitMethod.setRequestHeader("User-Agent", agent);
submitMethod.setRequestHeader("Referer", refer);
submitMethod.setRequestHeader("Cookie", cookie);
submitMethod.addParameter("timeStamp", ""+System.currentTimeMillis());
submitMethod.addParameter("inputsubje", EscapeUnescape.escape(inputsubje));// 编一下码
submitMethod.addParameter("inputArith", inputArith);
submitMethod.addParameter("configId", configId);
try {
int submitCode = httpClient.executeMethod(hc, submitMethod);
String submitResp = submitMethod.getResponseBodyAsString();
JSONArray array = JSON.parseArray(submitResp);
JSONObject object = (JSONObject) array.get(0);
String sign = object.getString("sign");
if ("yes".equals(sign)) {
logger.info("抢购登记成功, 退出程序!");
break;
}
logger.info("抢购登记失败,继续...");
} catch (Exception e) {
logger.error("提交抢购异常:" + e);
}
subInfoMethod.releaseConnection();
submitMethod.releaseConnection();
break;
}
现在活动结束了,发上来大家围观一下吧。
分享到:
相关推荐
一个纯js写的秒杀页面 三个过程:秒杀倒计时 秒杀进行时 秒杀结束
飞天侠秒杀程序为最新淘宝客程序,又称淘宝客程序、淘客程序、淘宝客源码,飞天侠秒杀程序是互联网上唯一一家发布秒杀程序。淘客程序里最好的淘宝客程序之 一,程序着重于搜索引擎SEO优化,伪原创跟自定义URL等多项...
以上是对"淘宝秒杀Python程序"可能涉及的各个技术点的分析,实际的程序可能根据具体实现有所差异,但这些知识点提供了一个大致的方向。对于想要学习或改进此类程序的开发者来说,深入理解并掌握这些技术是非常有益的...
微信小程序源码(带秒杀)是一个用于构建微信小程序电商应用的完整开发资源包,它包含前后端代码,便于开发者快速搭建一个具有秒杀功能的小程序。在这个项目中,前端部分是微信小程序的源码,而后端部分则基于PHP的...
这个PHP版的淘宝秒杀程序是为实现类似功能而设计的,通过一系列PHP文件和图片资源来构建一个完整的系统。 1. **PHP基础**:PHP是一种广泛使用的服务器端脚本语言,特别适合于Web开发。在这个秒杀程序中,PHP文件...
在这个项目中,"itrip-skill"可能是指项目源码的名称,暗示这是一个旅游相关的秒杀应用。源码可能包含以下组成部分:Controller(处理HTTP请求)、Service(实现业务逻辑)、DAO(数据访问对象,与数据库交互)、...
程序介绍:飞天侠淘宝客秒杀程序,仿9块9包邮网站程序,之前发了4.0,有网友反映不能用,本次发布的是4.1至尊版,没有域名限制,后台可采集淘宝商品,设置简单。 运行环境:PHP+Mysql(5.0以上版本)+Zend 本站声明...
标题与描述中提到的是一个名为"芋道商城"的电商解决方案,它基于流行的前端框架Vue.js和uni-app进行构建,旨在提供全面的电商功能,包括分销、拼团、砍价、秒杀、优惠券、积分系统、会员等级管理、小程序直播以及...
秒杀程序是网络购物平台中常见的一种促销方式,它允许用户在短时间内抢购限量商品。...然而,为了实现一个完整的、稳定的秒杀系统,还需要考虑更多的细节和复杂性,包括用户体验、性能优化、安全性等方面。
【小程序商城限时秒杀PSD海报banner】是一个设计资源,主要针对的是在微信小程序中进行商品促销活动的商家。在互联网营销中,限时秒杀活动是吸引用户关注、提升销售额的有效手段,它通过限定时间的优惠活动激发消费...
这个标题揭示了我们正在讨论的是一个使用Java编程语言构建的秒杀系统。秒杀系统是一种在电商或其他在线平台中常见的功能,它允许用户在短时间内抢购有限数量的商品。这种系统通常需要处理高并发请求,对性能和稳定性...
飞天侠淘宝客秒杀程序5.0是一个针对淘宝客的高效工具,旨在帮助用户快速采集淘宝平台上的秒杀商品信息,尤其是模仿9块9包邮的促销模式。该程序的更新版本为5.0至尊版,回应了4.1版本用户反馈的问题,提升了稳定性和...
秒杀插件 Chrome浏览器 抢购、秒杀插件(秒杀助手) 可自定义 秒杀辅助插件(减少人肉失误) 任意网站,自定义添加秒杀定时任务 支持可视化选择“秒杀”按钮+自定义选择dom元素 自定义秒杀频率,秒杀次数 秒杀前2...
Spring Boot是Spring框架的一个扩展,旨在简化Spring应用程序的初始设置和配置。在秒杀系统中,Spring Boot提供了快速开发、独立运行和内嵌Web服务器的功能。通过自动配置和starter组件,开发者可以快速构建可运行的...
本篇文章将深入探讨如何使用PHP和Redis来实现一个高效的秒杀系统,这对于初学者来说是一个非常实用的学习案例。 首先,我们要了解秒杀系统的基本要求:高并发处理、数据一致性以及防止恶意刷单。Redis作为一个内存...
4:logo默认路径..images/logo.gif 用您自己的LOGO覆盖即可! 演示网址:秒杀99 http://www.miaosha99.com 功能说明: 1、淘宝商家(卖家)可通过淘宝链接地址自动获取该链接商品的详细信息,并提交到本网站; 2、可...
该程序是企业在创立初期很好的技术基础框架,加快公司项目开发进度,当然也可以对现有的系统进行升级; 个人开发者也可以使用该程序承接外包项目; 初学JAVA的同学可以下载源代码来进行学习交流; springboot vue 小...
"java版京东抢购茅台秒杀程序.zip"这个标题表明这是一个使用Java编程语言编写的程序,主要用于在京东平台上参与茅台酒的抢购秒杀活动。这里的"秒杀"是一种限时限量的促销策略,消费者需要快速行动才能购买到商品。...
程序介绍:该网络竞拍、秒杀网整站程序采用PHP+MYSQL开发,功能包括:竞拍出价、竞拍公告、历史竞拍、发货记录、竞拍成功晒图、竞拍保价、会员充值等,竞拍信息支持微博转发。该系统竞拍功能已经很全面了,非常适合...
【淘宝秒杀验证码练习.exe】是一款专为提升用户在淘宝平台进行秒杀活动时的速度和技巧而设计的软件。在网购环境中,特别是大型促销期间,淘宝等电商平台的“秒杀”活动异常火爆,商品瞬间售罄,对于消费者来说,如何...