惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Blog — PlanetScale
Blog — PlanetScale
爱范儿
爱范儿
MongoDB | Blog
MongoDB | Blog
腾讯CDC
aimingoo的专栏
aimingoo的专栏
月光博客
月光博客
Engineering at Meta
Engineering at Meta
C
Check Point Blog
N
Netflix TechBlog - Medium
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
L
LangChain Blog
大猫的无限游戏
大猫的无限游戏
IT之家
IT之家
Microsoft Security Blog
Microsoft Security Blog
GbyAI
GbyAI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
The Blog of Author Tim Ferriss
Last Week in AI
Last Week in AI
B
Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
人人都是产品经理
人人都是产品经理
博客园 - 叶小钗
WordPress大学
WordPress大学
博客园 - 司徒正美

博客园 - 风与叶子

flutter event_bus 底层技术 Linux libreoffice安装 word转pdf 中文乱码(缺少字体解决) 设计短链接(short URL)系统 Nginx反向代理location与proxy_pass配置规则总结 mysql 删除异常进程脚本 docker 设置国内镜像源 python2.7 升级到 python3.6 aliyun OOS 资源同步【ossutil】 shell之文件路径截取 获取淘宝订单的解决方案——转 mysql实例的连接数max_user_connections 和max_connections 配置的那些事 Git log怎么查看分支提交过哪些文件 一篇文章搞定Git——Git代码管理及使用规范 小程序获取手机号 thinkphp3.2.3 CentOS7 YUM 安装MongoDB 4.0 shell 下载aliplayer 的视频 使用iptables给特定IP或端口限流 多台centos服务器同步更新代码文件 Nginx1.14.0+ModSecurity实现简单的WAF
羊了个羊小程序通关脚本
风与叶子 · 2022-09-19 · via 博客园 - 风与叶子
package main

/**
 * 羊了个羊小程序通关脚本
 * 
 * max := 10000        // 通关次数
 * concurrency = 20    // 控制并发量
 * param.Set("t", "")  // 登录token-自行抓包获取(必须设置)
 * 
 * @author thinklxr
 */
import (
    "fmt"
    "io/ioutil"
    "net/http"
    "net/url"
    "sync"
    "time"
)

type Limit struct {
    number  int
    channel chan struct{}
}

// Limit struct 初始化
func New(number int) *Limit {
    return &Limit{
        number:  number,
        channel: make(chan struct{}, number),
    }
}

// Run 方法:创建有限的 go f 函数的 goroutine
func (limit *Limit) Run(f func()) {
    limit.channel <- struct{}{}
    go func() {
        f()
        <-limit.channel
    }()
}

// WaitGroup 对象内部有一个计数器,从0开始
// 有三个方法:Add(), Done(), Wait() 用来控制计数器的数量
var wg = sync.WaitGroup{}

const (
    concurrency = 20 // 控制并发量
)

func main() {
    start := time.Now()
    limit := New(concurrency) // New Limit 控制并发量
    // 接口请求URL
    apiUrl := "https://cat-match.easygame2021.com/sheep/v1/game/game_over"
    max := 50000 // 通关次数

    // 初始化参数
    param := url.Values{}
    param.Set("rank_score", "1")
    param.Set("rank_state", "1")
    param.Set("rank_time", "888")
    param.Set("rank_role", "1")
    param.Set("skin", "1")
    param.Set("t", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2OTQ1OTQxNzIsIm5iZiI6MTY2MzQ5MTk3MiwiaWF0IjoxNjYzNDkwMTcyLCJqdGkiOiJDTTpjYXRfbWF0Y2g6bHQxMjM0NTYiLCJvcGVuX2lkIjoiIiwidWlkIjo5NjgzMjMzMSwiZGVidWciOiIiLCJsYW5nIjoiIn0.XpajPZ-_9lTC-yYLpVQYi1rXz_9sgy5WYUEJQi3Q07k")

    for i := 0; i < max; i++ {
        wg.Add(1)
        value := i
        goFunc := func() {
            fmt.Printf("start func: %d\n", value)
            data, err := Get(apiUrl, param)
            if err != nil {
                fmt.Println(err)
                return
            }
            // 其它逻辑代码...
            fmt.Println(string(data))
            wg.Done()
        }
        limit.Run(goFunc)
    }

    // 阻塞代码防止退出
    wg.Wait()

    fmt.Printf("耗时: %fs", time.Now().Sub(start).Seconds())
}

// Get 方式发起网络请求
func Get(apiURL string, params url.Values) (rs []byte, err error) {
    var Url *url.URL
    Url, err = url.Parse(apiURL)
    if err != nil {
        fmt.Printf("解析url错误:\r\n%v", err)
        return nil, err
    }
    //如果参数中有中文参数,这个方法会进行URLEncode
    Url.RawQuery = params.Encode()
    resp, err := http.Get(Url.String())
    if err != nil {
        fmt.Println("err:", err)
        return nil, err
    }
    defer resp.Body.Close()
    return ioutil.ReadAll(resp.Body)
}