谷姐:我们都是谷歌迷
We are all Google fans

【有偿】脚本大佬进,同时多并发执行curl-a8866051

Rate this post

要求同一0.1s内把1个post的curl命令多并发5次/10次同一时间发出请求

脚本要求bash test.sh

请输入并发次数:例如5次就输入5

输入需要同时并发执行的curl命令: (以下命令只做举例非实际要执行的命令,要求可自定义。)
curl 'https://otheve.beacon.qq.com/analytics/v2_upload'-H 'Host: otheve.beacon.qq.com'-H 'Content-Type: jce'-H 'Connection: keep-alive'-H 'Accept: */*'-H 'User-Agent: com.sogou.sogouinput.BaseKeyboard/34674 CFNetwork/1237 Darwin/20.4.0'-H 'Content-Length: 469'-H 'Accept-Language: zh-cn'-H 'Accept-Encoding: gzip, deflate, br'

然后回车即可

要求同一时刻发出5次上述curl请求。

网上找的方法好多都不是同一时刻发出这个post,每个请求有0.5-1秒左右的时差无法满足要求。
最先给出的老板我会给个支付宝口令红包。

热议
推荐楼 mjj666zzz 昨天20:35

使用'&'+wait 实现“多线程”

推荐楼 liugogal 昨天20:32

直接 xargs –P 5 curl xxxx不行吗?

2楼 阿里云 昨天20:26

这是撸腾讯啥接口?

3楼 大吊 昨天20:27

白**大厂?

5楼 a8866051 昨天20:33

这是撸腾讯啥接口?

不是,只是随便拿一个举例子

7楼 teardrops 昨天20:37

bash + curl 就只能多进程吧..

8楼 zxxx 昨天20:39

curl --parallel --parallel-immediate --parallel-max 10

9楼 251768938 昨天20:39

私聊我报价吧,用python给你写

10楼 a8866051 昨天20:41

使用'&'+wait 实现“多线程”

是多进程但是没法同时并发,这个只是执行完一个马上扔后台然后执行下一个

12楼 heibaihuali 昨天20:49

私聊我报价吧,用python给你写

python 不是伪多线程嘛

13楼 heibaihuali 昨天20:55

这种就用其它语言实现嘛,脚本语言不适合干这些,你延时需要0.1s,那就用cpp,先开几个线程等着,线程每10ms检查一次,有请求就立马发送不就完了,这样才能真正的保证延时

14楼 好鸭 昨天20:59

就是cc攻击嘛,github上很多的

15楼 sdqu 昨天21:01

for (int i=0;i<10;i++)pthread_create(xxxx)

16楼 Mr.lin 昨天21:11

python可以
gil锁并不影响并发

17楼 honus 昨天21:18

python 异步gather 应该是同时执行的

18楼 a8866051 昨天21:51

就是cc攻击嘛,github上很多的

不是拿来攻击,我需要也就5-20并发执行一次,不是几百

19楼 a8866051 昨天21:53

私聊我报价吧,用python给你写

大佬直接报个价吧,因为收益极小特多大的价钱我应该给不了

20楼 a8866051 昨天21:54

用管道呢,要不就换个性能高的机器

性能高的用这方法也没法5-10次执行在0.1s内发起全部执行命令,至少2,3秒

22楼 a8866051 昨天22:04

直接 xargs –P 5 curl xxxx不行吗?

执行直接没反应。。。

23楼 251768938 昨天22:05

大佬直接报个价吧,因为收益极小特多大的价钱我应该给不了

追求性能的话可以golang,不着急的话明天,一个甲骨文?

24楼 a8866051 昨天22:05

curl --parallel --parallel-immediate --parallel-max 10

测试请求无法同一时刻发出

25楼 zxxx 昨天22:06

测试请求无法同一时刻发出

要求10ms以内同时发出么?

26楼 jaymi 昨天22:09

https://github.com/jneeee/qos_tool
我写过一个python qos 脚本,并发可以很大。拿去改一改不是很难

27楼 a8866051 昨天22:42

要求10ms以内同时发出么?

越短越好,最好同一时刻

28楼 a8866051 昨天22:44

https://github.com/jneeee/qos_tool
我写过一个python qos 脚本,并发可以很大。拿去改一改不是很难 ...

主要是自己太菜了

29楼 解憂雜貨店 昨天22:57

PHP是最好的语言。
workerman版本:https://www.workerman.net/doc/workerman/components/workerman-http-client.html
swoole版本:0. https://wiki.swoole.com/#/coroutine/multi_call
1. https://wiki.swoole.com/#/coroutine/wait_group

30楼 解憂雜貨店 昨天23:02

PHP是最好的语言。
workerman版本:https://www.workerman.net/doc/workerman/components/workerman-http-c ...

cli应用,配和swoole-cli写一些shell脚本,贼爽贼方便

32楼 theoneman 4小时前

c语言 原生 tcp小程序 可以吧

需要把 --compressed去掉,url 的地址部分 前缀需要加个 -t (懒得写位置顺序)-c 后面紧跟的是并发量

    ./curl-pnrt -c 900 -t 'https://static.leetcode.cn/cn-mono-assets/production/main/runtime~main.8725179e.js' \
    -H 'sec-ch-ua: ".Not/A)Brand";v="99", "Google Chrome";v="103", "Chromium";v="103"' \
    -H 'Referer: https://leetcode.cn/' \
    -H 'DNT: 1' \
    -H 'sec-ch-ua-mobile: ?0' \
    -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36' \
    -H 'sec-ch-ua-platform: "macOS"'

其他的几乎一样(除非就没写那个功能,哈哈~)
-c: 就是想要的并发数1000 0.3s 左右(可能是同一个地域的服务器,所以快些)
-t: 目标url
-X: 默认get , 比如:-X POST 就是post
-H: 和原版crul 一样
-d: get的格式和原版一样 key1=xxx,post 的话和原版一样,不过记得加个-H 'Content-Type: xxxx/xxx' 的类型
-p: 打印响应的信息
效果如下:

源码:

    package main

    import (
    "bytes"
    "flag"
    "fmt"
    "io"
    "io/ioutil"
    "net/http"
    "net/url"
    "strings"
    "sync"
    "time"
    )

    type httpClient struct {
    client *http.Client
    }

    type stringsValue []string

    func newStringsValue(val string, p *[]string) *stringsValue {
    if val != "" {
    *p = append(*p, val)
    }

    return (*stringsValue)(p)
    }

    func (s *stringsValue) Set(val string) error {
    *s = append(*s, val)
    return nil
    }

    func (s *stringsValue) Get() interface{} { return []string(*s) }

    func (s *stringsValue) String() string { return fmt.Sprintln([]string(*s)) }

    func main() {
    ht := &httpClient{}
    ht.client = &http.Client{
    Transport: &http.Transport{
    MaxIdleConns: 900,
    MaxIdleConnsPerHost: 900,
    IdleConnTimeout: time.Second * 30,
    },
    }
    now := time.Now()
    httpUrl := ""

    headers := &[]string{}
    flag.StringVar(&httpUrl, "t", "", "Please enter the correct URL: http/https")
    count := flag.Int("c", 1, "Number of concurrent runs: Default is 1")
    flag.Var(newStringsValue("", headers), "H", "Example Imitate the curl command -h")
    protocol := flag.String("X", "GET", "-XPOST|GET")
    data := flag.String("d", "", "supportJSON")
    var isPrintResp bool
    flag.BoolVar(&isPrintResp, "p", false, "Whether to output RESP")
    //userAgent := flag.String("A", "", "User-Agent")
    flag.Parse()
    if httpUrl == "" {
    fmt.Println("Please enter the correct URL")
    }

    headerMap := map[string]string{}

    for _, s := range *headers {
    split := strings.Split(s, ": ")
    if len(split) == 2 {
    headerMap[split[0]] = split[1] } else {
    fmt.Println("header fail")
    return
    }

    }
    //fmt.Println(*headers)
    waitGroup := sync.WaitGroup{}
    *protocol = strings.ToUpper(*protocol)
    //time.Sleep(3 * time.Second)
    for i := 0; i < *count; i++ {
    fmt.Printf("")
    go func() {
    waitGroup.Add(1)
    if *protocol == "GET" {
    values := url.Values{}

    if data != nil && *data != "*" {
    for _, s := range strings.Split(*data, "&") {
    split := strings.Split(s, "=")
    if len(split) == 2 {
    values.Set(split[0], split[1])
    }
    }

    }
    if resp, err := ht.GET(httpUrl, values); err != nil {

    if err == io.EOF {
    if isPrintResp {
    fmt.Println(string(resp))
    }
    }
    fmt.Println(err)
    } else {
    if isPrintResp {
    fmt.Println(string(resp))
    }
    }
    } else if *protocol == "POST" {
    if resp, err := ht.POST(httpUrl, []byte(*data), headerMap); err != nil {
    if err == io.EOF {
    if isPrintResp {
    fmt.Println(string(resp))
    }
    }
    fmt.Println(err)
    } else {
    if isPrintResp {
    fmt.Println(string(resp))
    }

    }

    }

    waitGroup.Done()
    }()
    }

    waitGroup.Wait()
    fmt.Println()
    fmt.Printf("time spent: %v s", time.Since(now).Seconds())
    fmt.Println()
    }

    func (ht *httpClient) GET(httpUrl string, queryStr url.Values) (res []byte, err error) {
    var Url *url.URL
    Url, err = url.Parse(httpUrl)
    if err != nil {
    fmt.Printf("parse fail:%v", err)
    return nil, err
    }
    Url.RawQuery = queryStr.Encode()
    resp, err := ht.client.Get(Url.String())
    if err != nil {
    fmt.Println("err:", err)
    return nil, err
    }
    defer resp.Body.Close()
    return ioutil.ReadAll(resp.Body)
    }

    func (ht *httpClient) POST(httpUrl string, jsonByte []byte, headerMap map[string]string) (res []byte, err error) {
    var Url *url.URL
    Url, err = url.Parse(httpUrl)
    if err != nil {
    fmt.Printf("parse fail:%v", err)
    return nil, err
    }

    request, err := http.NewRequest("POST", Url.String(), bytes.NewBuffer(jsonByte))
    if err != nil {
    fmt.Println("err:", err)
    return nil, err
    }
    for k, v := range headerMap {
    request.Header.Set(k, v)
    }
    //request.Header.Set("Content-Type", "application/json")
    resp, err := ht.client.Do(request)
    if err != nil {
    fmt.Println("err:", err)
    return nil, err
    }

    defer resp.Body.Close()
    return ioutil.ReadAll(resp.Body)
    }

34楼 zhongziso 6分钟前

这是啥接口?

申明:本文内容由网友收集分享,仅供学习参考使用。如文中内容侵犯到您的利益,请在文章下方留言,本站会第一时间进行处理。

未经谷姐允许不得转载:谷姐靓号网 » 【有偿】脚本大佬进,同时多并发执行curl-a8866051
分享到: 生成海报

热门文章

评论 抢沙发

评论前必须登录!

立即登录   注册

买Google Voice认准【谷姐靓号网】

Google Voice靓号列表Google Voice自助购买
切换注册

登录

忘记密码 ?

切换登录

注册

我们将发送一封验证邮件至你的邮箱, 请正确填写以完成账号注册和激活