package main import ( "crypto/md5" "encoding/hex" "encoding/json" "fmt" "kami_scripts/models" "math" "math/rand" "sort" "strconv" "sync" "time" "github.com/go-resty/resty/v2" gonanoid "github.com/matoous/go-nanoid/v2" ) // SortMap 对map的key值进行排序 func SortMap(m map[string]string) []string { var arr []string for k := range m { arr = append(arr, k) } sort.Strings(arr) return arr } func GenRandomCardNo() string { cardNo := "250306" for i := 0; i < 10; i++ { cardNo += strconv.Itoa(rand.Intn(10)) } return cardNo } func GenRandomCardPass() string { cardPass := "350610" for i := 0; i < 10; i++ { cardPass += strconv.Itoa(rand.Intn(10)) } return cardPass } func genSign(data models.Data) string { appSecret := "ssssc9kit6bimggos5kk0c9g" params := map[string]string{} exValue, _ := json.Marshal(data.ExValue) params["exValue"] = string(exValue) params["orderNo"] = data.OrderNo params["orderPeriod"] = data.OrderPeriod params["orderPrice"] = data.OrderPrice params["notifyUrl"] = data.NotifyUrl params["timestamp"] = data.TimeStamp params["payKey"] = data.PayKey params["ip"] = data.Ip params["productCode"] = data.ProductCode strArr := SortMap(params) signStr := "" for i := 0; i < len(strArr); i++ { k := strArr[i] if len(params[k]) == 0 { signStr += k } else { signStr += k + params[k] } } signStr += appSecret h := md5.New() h.Write([]byte(signStr)) return hex.EncodeToString(h.Sum(nil)) } func randomRequest(count int, stop chan int, group *sync.WaitGroup) { defer func() { <-stop group.Done() if err := recover(); err != nil { fmt.Println(err) } }() id, _ := gonanoid.New() formData := models.Data{ ExValue: models.ExValue{ Data: GenRandomCardPass(), FaceType: "10", CardNo: GenRandomCardNo(), RecoveryType: "2", }, OrderNo: id, OrderPeriod: strconv.Itoa(rand.Intn(24)), OrderPrice: "10", ProductCode: "玖隆", Ip: "127.0.0.1", NotifyUrl: "http://kami_shop:12305/shop/notify", PayKey: "kkkkc9kit6bimggos5kk0c90", TimeStamp: strconv.FormatInt(time.Now().Unix(), 10), Sign: "", } formData.Sign = genSign(formData) client := resty.New() resp, _ := client.R().SetFormDataFromValues(formData.Url()).Post("http://49.233.216.171:12309/gateway/scan") fmt.Println(string(resp.Body())) } func main() { group := sync.WaitGroup{} startTime := time.Now() stop := make(chan int, 50) for i := 0; i < int(math.Pow10(2)); i++ { group.Add(1) stop <- 1 go randomRequest(i, stop, &group) } group.Wait() fmt.Println("总耗时", time.Since(startTime).Seconds()) }