最近看阿里的月饼事件深有感慨啊,嗯,身为一名有职业操守和道德的资深技术人员,我们一定不要像文中说的这样子做。
我们要秉持诚信公开的原则,不能利用系统漏洞。。。好吧,开始进入正题。
我们先看下用什么手段才能先人一步的抢到东西。

整体思路

一般抢购或者竞拍网站。
抢购网站的流程:

  • 刷新一个页面看到是否开抢了,因为现在网站的分布式部署,一个页面对一个域名的请求数目等等的限制, 一般这个页面将会是一个链接:urlA。
  • 监控urlA的返回结果,当达到预期值的时候,调用下单的请求,或者是点击事件。

竞拍网站的要稍稍的麻烦一点点:

  • 刷新得到当前的最高报价
  • 然后设置一下期望的报价和加价幅度
  • 然后在期望值之内不停的加价,保证能够在最后抢到期望金额之下的商品

实战

咱们以京东夺宝岛为例,搞一个吧

  • 在Chorme中打开夺宝岛网页,按F12,然后刷新页面
  • 转到Network标签,看所有的请求,研究出那个请求是拿当前价格的
    方式是点击请求,看Response中的返回值:


得到链接:http://dbditem.jd.com/json/current/englishquery?
这个链接能够查看所有的出价记录的json字符串,第一个就是当前的报价了

  • 然后就是设置一个加价值,心理价位, 然后提交
  • 再次获得最高价,如果不是我出的那么就再次加价,循环这个过程
  • 当然还是的通过Chrome来知道提交加价的请求应该是什么
    这里直接列出结果:http://paimai.jd.com/services/bid.action?

查询价,然后加价,最后提交的源代码如下:

var t,count = 1,price=0,pin = getCookie('pin'),f = function(){$.ajax({url:'http://paimai.jd.com/json/current/englishquery?paimaiId='+paimaiId+'&skuId=0&t=964468&start=0&end=9',async:false,success:function(data){var currentPrice = parseFloat(data.currentPrice);console.info("第",count,"次检测商品当前拍卖价格是",currentPrice);if(data.auctionStatus == 2){console.error("商品拍卖结束,获得者",data.currentUser);clearTimeout(t);return;}if(data.currentPrice < 1500) {if(pin != data.currentUser && price != currentPrice){$.ajax({url:'http://paimai.jd.com/services/bid.action?t=369168&paimaiId='+paimaiId+'&proxyFlag=0&bidSource=0&price='+(currentPrice+1),async:false,success:function(data1){console.warn("第",count,"次加价拍,本次出价",(currentPrice+1),"出价结果",data1.message);if(data1.result == 200){currentPrice = currentPrice+1;} else {if(data1.result == 516) {clearTimeout(t);return;}}}});} else {console.info("商品价格未变,忽略加价");}price = currentPrice;t = setTimeout(f,1000);} else {console.error("商品价格高于原价5折,停止加价");clearTimeout(t);}}});count++;
}
f();//暂停
clearTimeout(t)

代码还是比较简单,就不多做解释了。这里说一下有个关键的地方是网页分析的部分。就是从请求中拿到了自己想要的数据。
这样样例的请求是一个json,所以能够直接用了,如果是一个html网页应该怎么办呢?
因为现在的网页一般都用了jquery,所以可以使用jquery脚本来做。他的拾取器还是之棒的。
比如这样:
var val = (‘tr:eq(2)′,html);(‘td:gt(1)’,val).html() 第二个tr的第一个td. 等等

服务器如何防备

最后咱们来说说如何防范这种做法。

  • 让登录变难, 防止代码自动登录。 12306的网站的验证码跟高考题一样,就是为了这个,尽量只能真人用户。
  • 但是因为sessionid是放在cookie中的,可以用代码来模拟cookie来保持登录状态,所以就引入了cookie加密的方式。 但是不能解决上面说的js脚本的问题。
  • 服务器端针对每一个登录用户,限制刷新等次数。 抢华为或者P8的时候经常会遇到太繁忙了啊,请求次数过多啊,等等就是这样的, 具体可以用redis来根据用户的session来存次数,甚至于存在本地内存中。这个有机会详细的说。
  • 服务器不根据真正的请求到达顺序来决定抢购结果。 可以建立一个池,然后从最小到达的100000请求中取出部分,这样就能够防止,脚本比人快,导致大量都是用脚本抢到的,会相对公平一些。
  • 都是简单的说一下,以后咱们有机会细讲。

月饼事件技术还原 - 用js+Chorme来做抢电商的东西吧相关推荐

  1. 技术干货(2 of 5):电商秒杀架构分析

    在上一篇"分析与实战:微信红包体系的整理"文章中,我们对微信红包的体系结构进行了非常深入详细的剖析,并且着重讨论了微信红包在高并发环境下所面临的问题及应对的策略. 说到高并发,其实 ...

  2. Vue+JS+Element UI实战(电商项目1)

    目录 1.电商业务概述 2.电商后台管理系统的功能 ​3.项目初始化步骤 4.后台项目的环境安装配置 4.1. API V1 接口说明 4.2. 支持的请求方法 4.3. 通用返回状态说明 5.测试后 ...

  3. JS任务机制 - springboot实战电商项目mall4j

    springboot实战电商项目mall4j (https://gitee.com/gz-yami/mall4j) java商城系统源码 1.介绍 工作一段时间了,今天在这总结一下浏览器执行JS任务机 ...

  4. 初识javaWeb:纯JSP+CSS+JS构建一个简单的电商平台

    github地址:https://github.com/yaodebian/GoGoLe 初识java web,想在后端用java有一技之长.注:以下仅是自己的一个程序记录. 首先java web的动 ...

  5. XR虚拟直播技术加速落地,虚拟场景直播拓展电商直播营销空间边界

    近日,天猫#超级新秀系列#携手意大利牛仔时装品牌Diesel上演了一场虚拟直播大秀.虚拟秀场.定位追踪.实时互动......一系列潮流科技元素,为这场品牌直播赋予了多重亮点.不仅带动了Diesel新品 ...

  6. html+css+js实现一个简单的电商商城首页

    文章目录 2021.05.17更新 2020.11.24更新 声明:慕课网学习时的web大作业,题目慕课网老师给出,总算是成功实现. 1. 静态网页源码 1.1 index.html: 1.2 ind ...

  7. 做个电商网站需要用到的技术

    表示层:spring mvc 3.1 + annotation      控制层:spring 3.1      持久层:hibernate 3.6 +jdbcTemplate      后台列表控件 ...

  8. node.js -- 手把手教你搭建 电商平台

    一.项目开始前,开发环境:jquery,node.js,webpack打包.我们养成先在github上新建项目,再拉代码:git常见命令: 1,git clone <>        克隆 ...

  9. node.js+vue的爱心助农电商管理系统

    技术架构 nodejs+vue 功能模块 登录登出模块 农产品信息是每个用户独立存在的,因此用户需要进行登录查看以及操作后台系统.应考虑到用户管理问题,暂没有开放用户注册模块,新用户注册可以联系数据库 ...

  10. java技术主管的岗位职责_【JAVA项目经理/技术负责人职责】2021年利必达电商JAVA项目经理/技术负责人岗位职责-看准网...

    本人机械方向大三学生,参加了17年5月底的大疆提前批校招,应聘机械工程师职位,经过了两轮简历筛选.一轮网测.一次电话初面和一次视频面试,因为自身能力不够,视频面试表现不好,应该拿不到最后的offer了 ...

最新文章

  1. mysql表文件被删_mysql表物理文件被误删的解决方法
  2. 如何在 Janus 中获取 WebRTC 的流
  3. 如何导出NK.bin中的内容
  4. SQL中like的用法
  5. 三大主流开源工作流引擎技术分析与市场预测
  6. leetcode 611. Valid Triangle Number | 611. 有效三角形的个数(Java)
  7. KRKR简单使用实例开发
  8. 关于高级导数的一个不等式估计
  9. 系统测试与端到端测试:哪一个更适合选择?
  10. 接口测试并不只是测试参数和返回值
  11. Jmeter负载和压力测试
  12. php 查oracle 表不存在报错处理,合同信息查询时,报错提示oracle数据库执行异常,表或视图不存在...
  13. ANDROID框架揭秘
  14. 基于python生成手写的笔记
  15. 记一次jenkins构建无权限问题
  16. 概率论与数理统计公式整理
  17. js日历控件html,第11款插件:jquery.jCal.js显示日历插件
  18. 计算机表格出现value,excel中出现#value!的解决办法
  19. 数据库底层原理-------数据结构
  20. Kafka组件connector使用详解

热门文章

  1. xlsx表格怎么做汇总统计_表格进行分类汇总怎么做
  2. R语言ggplot2可视化格式化轴标签:用逗号格式化ggplot2轴标签、在轴标签数值中加入符号标签(货币符号)
  3. java http 500错误怎么解决_java - HTTP POST请求中出现500内部错误
  4. 面向对象基础(类封装继承等等)
  5. p4:MATLAB安装出现license checkout failed, license Manager Error-8 如何解决?
  6. 8086CPU I/O系统组织 8253芯片 8255A芯片
  7. ​ SequoiaDB 简介​,巨杉数据库整体介绍
  8. minecraft崩溃java,je1.7.10,进入世界就崩溃,解决一下
  9. 数据处理笔记6:缺失值填充
  10. 突破限制轻松下载网盘的文件,免登陆使用,速度也不错!