Giter VIP home page Giter VIP logo

zmyy-seckill's Introduction

知苗易约抢购小程序[由于知苗更新太快,本人已工作时间不足,维护跟不上,当前脚本已失效]

目前开发完成,暂未测试,因而暂不给(以后可能也不给)使用说明。本项目是作者本人写的第一个Go程序。只作学习交流使用。之初遇到不少的问题,多亏一些大佬点拨,不胜感激。【如有帮助,请点个star

【2021-04-14】v1.2.0 增加IP轮询机制【暂时无法使用】,说明如下:

  • 无法使用原因:每个ip有自己的cookie,不可共享Cookie。

  • ip代理需要自行添加,文件在ip/ip.txt,ip需要支持https

  • 限速器以IP为单位,每个IP都将拥有一个线程进行预约

  • 验证码的获取、识别、订单提交仍以串行方式(加锁)运行,这是本项目最大的性能瓶颈

【2021-04-09】v1.1.0 增加IP代理

【2021-03-21】v1.0.1 删除用于获取zftsl参数的js文件

【2021-03-20】v1.0.0 验证码exe识别模块改为直接调用py脚本,以支持非windows用户使用

  • 问题进度
    • 【已解决】增加IP代理,详细说明如下
      • IP使用的是免费的IP,所以速度不会很快,甚至有的IP会不可用
      • 默认已开启IP代理功能,默认使用本机IP,当本地IP发生error时切换代理IP
    • 【已解决】2021/2/22 -运行时出现403错误,经调试后发现小程序做出了相当大的更新导致的。原来请求的url都添加了一些动态的变化参数如key302和expire302
      • 【问题详细说明】当程序请求原来的URL时,会返回403错误,但实际是由于302重定向引起的。即当第一次请求URL时,实际请求的资源是不存在的,小程序后端会重定向到一个新的URL,并赋予key302和expire302两个参数,而在zmyy程序中是无法被重定向的。
      • 【解决方案】若想拿到重定向的url,可以通过请求原url,并在响应报文resp的header中得到Location参数,即为重定向的url
    • 【已解决】获取验证码时,并未得到验证码图片,而是一大串文字
      • 该大串响应报文是图片的Base64编码,可转换成图片
    • 【已解决】滑块验证码的x轴坐标可通过opencv来解决。附一个大佬的Python代码,亲测可用https://github.com/crazyxw/SlideCrack
      • 在golang调用Python程序时,若该*.py文件中没有导入第三方依赖,可顺利被go调用。当导入三方依赖时,会报错,这种情况目前本人无法解决【已解决,见版本v1.0.0】。
      • 由于本人是Windows系统,故将python代码打包成了*.exe可执行程序进行调用,测试后可行
    • 【已解决】滑块验证码获取需要一个zftsl的参数,猜测与时间戳和sessionid有关,目前无法得到该值,故无法拿到滑块验证码文本。
      • 逆向小程序后,拿到相关的js文件,找到了zftsl参数的来源。
      • 在使用golang调用js时,出现了与调用Python一样的情况,即不能有三方依赖。作者通过将几个js文件函数拼接到了一个文件中-app.js。go调用该js后可得到zftsl参数。测试通过。
    • 【已解决】在拿到滑块验证码的Base64编码时,发现该编码太长导致[]byte接收不完全,因而无法复原验证码图片。
      • 通过将resp.body写入到本地文件中,再用json解析本地文件得到两个图片的base64编码
      • 需要注意的是,在多协程环境下,会有大量的文件读写操作,可能会造成文件的覆盖。未来需要对文件名(如 file+协程ID)进行区分,在验证码识别完成后可不对文件进行删除操作,直接覆盖对应文件名
    • 【已解决】在代码运行过程中出现503异常,Degug时程序却运行正常,猜测是请求过快导致被服务禁止
      • 通过在关键请求前后增加sleep时间,降低访问频率
      • 增加LimitRate限流,在实际测试中发现,当请求速率设置有1次/s时,有小概率被限流的风险。当频率为1次/2s时,不会被限流。因此暂时设置速率为1次/2s
    • 【已解决】增加多线程以提高运行效率
      • 增加多线程访问时,出现验证码识别失败的问题。猜测使用同一session并发请求获取验证码图片时,会导致小程序服务端前一次请求的验证码结果失效,即多线程并发请求和验证验证码会出现混乱状况。
      • 为解决上述问题,作者采用加锁的方式。从验证码获取到识别完成这一流程整合成一个步骤对其加锁,当流程中有任一操作失败时就释放锁,把请求资源让给其他线程执行。测试可行。
  • 开发进度
    • 开完发成。
  • 项目结构说明:
    • 用户信息在config/conf.yaml中手动配置
    • 项目build后会生成可执行文件zmyy_seckill.exe,使用时勿修改文件名。(因路径使用了正则匹配。)
    • 本人已尽可能减少使用难度,但conf.yaml中的Cookie因技术原因无法解决,故需要使用者本人获取
      • 推荐在电脑上打开小程序,并使用fiddler抓包即可

zmyy-seckill's People

Contributors

imaginefish avatar sotowang avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

zmyy-seckill's Issues

大佬方便交流吗, 我最近也写了一个Java版本的。

同样使用的代理模式多线程发请求, 测试发现代理模式下, 从验证码一直到下预约单, 不能使用代理或者说必须是同一个IP的代理, 不然会返回408. 但是Token是唯一的, 另一条线程即使获取到验证码的guid, 同一条token下只能有一个guid对应, 其他线程的会失效. 所以归根结底, 在从获取验证码一直到下订单的时候只能单线程, 单IP操作.

不过我也试过偷鸡, 可以在开始前先获取GUID, 这个guid的有效时间测试中10分钟是有的.

但是最大的问题不是这个...最大的问题还是服务器拥堵的问题. 还没到点就拿不到预约时间的mxid了.....所以至今在服务器高压的情况下没抢成功过...请求不管多少次都是阻塞的.. 希望能讨论共同解决

fetch err:503

大佬,请问一下我在跑的时候出现fetch err:503是什么问题,能不能帮忙告知一下,谢谢了
image

实际使用过程出现问题及建议

  1. 根据抓包获取的指定日期ID和接种点ID和时段ID可以通过conf.yaml设置预设,抢苗开始直接请求预约,不用再重新请求获取时段等,同时未预置ID时打开自动将获取的指定接种点ID保存到配置文件中;
  2. 超时程序会直接崩,建议加个超时重新请求;
  3. cloud.cn2030.com为yun.cn2030.com的代理服务器,流量最终到yun.cn2030.com,可以考虑设置多节点切换;

MAC电脑环境配置问题

首先谢谢大佬的代码,其次想问一下,这个代码,Mac系统中是否无法正常使用,我编译时显示失败,同时,在config.go中,
"github.com/thedevsaddam/gojsonq/v2"
"gopkg.in/yaml.v2"
这些代码标红,显示错误!

知苗

大佬,持续关注你的进度

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.